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
投稿
猜你喜欢
W3C 接连推出 7 个 HTML 草案
2010-03-10 10:37:00
给网页添加打印功能按钮
2008-12-12 13:11:00
带你深入了解MySQL语句优化的基本原则
2008-11-27 17:00:00
美化段落文本 1
2008-05-15 12:24:00
IE下float产生双倍margin
2007-12-26 12:29:00
ASP中Cache技术的应用
2007-09-28 12:41:00
Refactoring HTML 书评
2008-07-10 12:00:00
[翻译]标记语言和样式手册 Chapter 11 打印样式
2008-02-11 18:44:00
设计从"心"开始
2011-05-21 08:37:00
多级联动下拉选择框,动态获取下一级
2008-09-04 10:34:00
SQL 2008 FileStream数据类型
2008-10-28 21:07:00
SQL Server中导入导出数据的三种方式
2008-11-28 15:53:00
全局于网站整体的网页设计
2009-03-27 17:15:00
微软补丁KB967723造成MySQL频繁无法连接
2009-11-03 14:28:00
将内容自动添加到指定文本域的JS
2007-10-08 12:50:00
如何快速定位页面中复杂 CSS BUG 问题
2009-01-15 12:23:00
将HTML自动转为JS代码
2010-03-17 20:49:00
HTML在线编辑器任意设置字号大小
2007-08-29 19:55:00
asp如何正确显示数据库里同时存在的GB码和BIG5编码?
2010-06-28 18:26:00
CSS兼容性(IE和Firefox)技巧大全
2010-07-29 12:29:00