JavaScript版无组件上传类

作者:编程浪子 来源:51js 时间:2007-10-06 23:16:00 

asp无组件上传VBS编写的大家见的多了,这个是纯javascript实现的上传,原来unicode可以解决读取位置的问题,这次真的是纯JS了,VBS终于可以退休了,发出来让大家看看。

<%@ language="javascript"%>
<%
var self = Request.serverVariables("SCRIPT_NAME");
if (Request.serverVariables("REQUEST_METHOD")=="POST")
{
        var oo = new uploadFile();
        oo.path = "";                 //存放路径,为空表示当前路径,默认为uploadFile
        oo.named = "date";            //命名方式,date表示用日期来命名,file表示用文件名本身,默认为file
        oo.ext = "jpg,gif,rar";               //允许上传的扩展名,all表示都允许,默认为all
        oo.over = true;               //当存在相同文件名时是否覆盖,默认为false
        oo.size = 2*1024*1024;        //最大字节数限制,默认为1G
        oo.upload();
        Response.write(’<script type="text/javascript">location.replace("’+self+’")</script>’);
}
//ASP无组件上传类
function uploadFile()
{
    var bLen  = Request.totalBytes;
    var bText = Request.binaryRead(bLen);
    var oo = Server.createObject("ADODB.Stream");
    oo.mode = 3;
        this.path = "uploadFile";
        this.named = "file";
        this.ext = "all";
        this.over = false;
        this.size = 1*1024*1024*1024;        //1GB
        //文件上传        
        this.upload = function ()
        {
                var o = this.getInfo();
                if (o.size>this.size)
                {
                        alert("文件过大,不能上传!");
                        return;                
                }
                var f = this.getFileName();
                var ext = f.replace(/^.+\./,"");
                if (this.ext!="all"&&!new RegExp(this.ext.replace(/,/g,"|"),"ig").test(ext))
                {
                        alert("目前暂不支持扩展名为 "+ext+" 的文件上传!");
                        return;
                }
                if (this.named=="date")
                {
                        f = new Date().toLocaleString().replace(/\D/g,"") + "." + ext;
                }
                oo.open();
                oo.type = 1;
                oo.write(o.bin);
                this.path = this.path.replace(/[^\/\\]$/,"$&/");
                var fso = Server.createObject("Scripting.FileSystemObject");
                if(this.path!=""&&!fso.folderExists(Server.mapPath(this.path)))
                {
                        fso.createFolder(Server.mapPath(this.path));
                }
                try
                {
                        oo.saveToFile(Server.mapPath(this.path+f),this.over?2:1);
                        alert("上传成功!");
                }
                catch(e)
                {
                        alert("对不起,此文件已存在!");
                }
                oo.close();
                delete(oo);
        }
        //获取二进制和文件字节数
        this.getInfo = function ()
        {
                oo.open();
                oo.type=1;
                oo.write(bText);
                oo.position = 0;                                
                oo.type=2;
                oo.charset="unicode";
                var gbCode=escape(oo.readText()).replace(/%u(..)(..)/g,"%$2%$1");
                var sPos=gbCode.indexOf("%0D%0A%0D%0A")+12;
                var sLength=bLen-(gbCode.substring(0,gbCode.indexOf("%0D%0A")).length/3)-sPos/3-6;
                oo.close();
        
                oo.open();
                oo.type = 1;        
                oo.write(bText);
                oo.position=sPos/3;
                var bFile=oo.read(sLength);
                oo.close();
                
                return { bin:bFile, size:sLength };
        }
        //获取文件名        
        this.getFileName = function ()
        {
                oo.open();
                oo.type = 2;
                oo.writeText(bText);
                oo.position = 0;
                oo.charset = "gb2312";
                var fileName = oo.readText().match(/filename=\"(.+?)\"/i)[1].split("\\").slice(-1)[0];
                oo.close();
                return fileName;
        }
        
        function alert(msg)
        {
                Response.write(’<script type="text/javascript">alert("’+msg+’");</script>’);
        }
}
%>


<html>
<head>
  <title>ASP无组件上传类(JS版)</title>
  <meta http-equiv="content-Type" content="text/html; charset=gb2312">
</head>
<body>
  <form action="<%=self%>" method="post" enctype="multipart/form-data" onSubmit="return (this.upFile.value!=’’);"> 
    <input type="file" name="upFile"/>
    <input type="submit" value="上传文件"/>
  </form>
</body>
</html> 


标签:上传,无组件,javascript
0
投稿

猜你喜欢

  • python3的url编码和解码,自定义gbk、utf-8的例子

    2022-08-02 10:07:39
  • select * from sp_who的解决方案

    2024-01-15 09:55:52
  • python实现简单的超市商品销售管理系统

    2021-08-24 00:07:32
  • Go语言操作Excel利器之excelize类库详解

    2024-04-28 09:12:47
  • python简单分割文件的方法

    2021-08-09 10:32:33
  • Python将主机名转换为IP地址的方法

    2023-09-06 21:30:42
  • SQL 截取字符串应用代码

    2024-01-21 08:53:14
  • 解决python3运行selenium下HTMLTestRunner报错的问题

    2022-04-14 16:44:19
  • asp提高首页性能的一个技巧

    2008-04-05 06:54:00
  • python中xlutils库用法浅析

    2023-06-05 15:22:26
  • C#Web应用程序入门经典学习笔记之二

    2024-06-05 09:28:00
  • Bad Tags — html有害的标签

    2008-10-13 19:47:00
  • 三大Python翻译神器再也不用担心学不好英语

    2022-02-13 07:27:19
  • WEB界面设计五种特征

    2010-03-16 12:34:00
  • 关于爬虫中scrapy.Request的更多参数用法

    2023-10-14 02:20:26
  • python 多个参数不为空校验方法

    2022-12-15 10:48:56
  • Python 矩阵转置的几种方法小结

    2023-01-20 15:51:56
  • python unittest实现api自动化测试

    2022-12-05 09:52:37
  • Mozilla专有JavaScript扩展之一(__noSuchMethod__)

    2009-03-01 12:45:00
  • 解析Python3中的Import

    2023-01-10 05:11:47
  • asp之家 网络编程 m.aspxhome.com