一 : [ASP.NET] 限制上传文件类型的两种方法
通常,为了防止因用户上传有害文件(如木马、黑客程序)引发的安全性问题,Web程序都会对用户允许上传的文件类型加以限制。而本文将要介绍的就是如何在ASP.NET应用程序中利用Web Control的内置属性简单高效地实现限制上传文件类型的功能。
在调用PostFile对象的SaveAs方法保存上传文件之前,可以通过PostFile对象的FileName属性得到上传的文件名。而有了上传的文件名,就可以采用比对文件后缀名的方法知道上传的文件是否属于允许上传的文件类型。
根据这个思想,我们就得到了下面这段代码:
If Path.GetExtension(sFilePath) <> ".zip" Then
Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!"
Return
这时如果上传后缀名不是zip的文件,就会发现文件无法上传了。不过,这并表示我们就不能把上传其他格式的文件了。其实,如果在上传前,事先把文件后缀名改成zip,上面这段代码就失去作用了。
之所以会出现这种情况,在于上面的判断仅仅比对了文件名字符串,并没有对文件格式做进一步的分析。因此,如果要彻底限制上传的文件类型,还需要用到PostFile对象的ContentType属性。ContentType属性的功能是获取客户端发送的文件的 MIME (注一)内容类型,由于浏览器在向服务器发送请求前,首先会确定发送内容的MIME类型,并将MIME类型作为信息的一部分提交到服务器端,因此,有了MIME类型信息(注二),就可以准确知道上传文件的实际类型了。
If File1.PostedFile.ContentType <> "application/zip" Then
Label2.Text = "本应用程序只允许上传zip格式的文件,请重新选择!"
这时,如果再采用修改后缀名的方法上传文件就会发现再也无法上传了。
注一:MIME是一种技术规范,其中文翻译为多用途Internet邮件扩展(Multipurpose Internet Mail Extensions),主要用来在Internet传输过程中表示不同编码格式的文件;
注二:要获取不同文件格式的MIME定义,只要启动注册表编辑器,然后在HKEY_CLASSES_ROOT下找到跟后缀名对应的注册表项,如果存在文件格式的MIME定义,在右侧窗口就会显示一个名为“Content Type”的键,而这个键的值就是文件格式的MIME定义。
以上两种方法混用,上传文件基本上就被限制了。但是如果某些有心人如果更改注册表的 MIME 值的内容一样可以上传恶意程序,如果这样的话,只有加固程序和系统,不让其更改上传后文件的扩展名。或是采用自定义的控件,采用更严密的检测措施
二 : ASP文件上传方式大比拼
ASP文件上传方式大比拼
转]ASP文件上传方式大比拼
ASP文件上传方式大比拼
无组件方式
1.化境ASP无组件上传 V2.0;(下载)
一直以来,由于FileSystemObject的局限,所以ASP最大的难题就是文件上传,大多解决法就是安装第三方上传组件。[www.61k.com]可第三方组件有很多问题,有的组件要注册,有的组件要在表单中加上他的版权信息。还有的就是组件的兼容问题。在网上也流传了很多无组件上传的代码,但都是只能上传文本文件,或是只能将文件上传到数据库中。 化境无组件上传的概念,是在全国,甚至整个网络界,首次提出的,由于代码是开发的,所以在本代码发布后,现在已被网友修改成各式各样的版本。
2.无惧无组件上传类2.0;(下载)
在2004年7月10日完成了"无惧无组件上传类2.0"版,该版相对于前作在安全上作出了最大的改进,在类内部实现了上传类型的黑白名单,更多方便了各种上传的环境,即使黑客突破了上传程序,但是最终在保存文件时会使他的所有努力付之流水,该版在使用上比前作更加方便,更人性化了。由于添加和修改了不少属性值,在移植上需要作出比较大的修改。
3.风声无组件上传类V2.0 [Rumor UpLoadClass Version 2.0];(下载)
长期以来,上传文件是ASP的一个难题。第三方组件上传速度快,但是需要在服务器端注册,而且有部分需要附加版权信息或付费使用,对大多数用户是可望不可及的事。网络上流传的一些无组件上传类,质量良莠不齐,在安全性设计上甚至存在一些漏洞,在性能方面,更是让用户望而却步。网标(Net Builder)经过长时间对上传算法的研究优化,开发出可与组件上传相媲美的ASP无组件上传类——风声无组件上传类。经测试,该无组件上传类在性能上明显超过同类ASP无组件上传程序,接近甚至超过一些上传组件,安全性、易用性更优于同类程序。
组件方式1.LyfUpload上传组件(国产,作者:刘玉锋);(下载)
国产的很好用的免费上传组件
支持单文件上传 (1.2版支持上载文件覆盖判断功能)
支持上传多个文件
可以将上传的文件改名保存(1.2版支持变量保存功能)
可以同时使用其它的form元素的信息
支持限制文件上传的大小
支持限制文件上传的类型 (1.1版修改,支持多文件类型)(1.2版修正)
可以得到上传文件的大小 (1.1版新增功能)
支持将文件内容保存进数据库,如上载图形文件、DOC文件等各类Windows文件 (1.1版新增功能)
支持从数据库中读取上载文件到数据库中的记录,如显示图形文件、DOC文件等各类Windows文件 (1.1版新增功能)
可以得到上传文件的MIME类型,如gif文件为images/gif(1.2版修正)
本版本完全免费,没有任何限制
2.W3Upload上传组件;(下载)
与W3Jmail同一师门,老牌的上传组件;
3.AspUpload3.0上传组件;(下载)
邮件组件AspEmail大家肯定不陌生,这是同一家公司的产品,很不错的,支持进度条显示上传进度。
4.SaFileup上传组件;(下载)
老牌上传组件
5.SiteGalaxyUpload上传组件;(下载)
老牌上传组件
扩展:asp.net 上传文件 / asp.net mvc 上传文件 / asp上传文件代码
三 : asp.net+ajaxfileupload.js 实现文件异步上传代码分享
由于代码很简单,这里就闲话不多说了,直接上代码,小伙伴们自己研读代码就明白了。
前台代码:
代码如下:
/*修改头像*/
//上传
function _sc() {
$(".ckfile").html("").css("color", "#535353");
$("#_userImgPath").val("");
var str = $("#file").val();
if ($.trim(str) == "") {
$(".ckfile").html("请选择文件。").css("color", "red");
return false;
}
else {
var postfix = str.substring(str.lastIndexOf(".") + 1).toUpperCase();
if (postfix == "JPG" || postfix == "JPEG" || postfix == "PNG" || postfix == "GIF" || postfix == "BMP") {
$('#showimg').attr('src', 'Images/loading.gif').attr("title", "上传中,请稍后…");
var path = "Upload/UserImg";
$.ajaxFileUpload({
url: '/Upload.aspx?path=Upload|UserImg&shape=100*100',
secureuri: false,
fileElementId: 'file',
dataType: 'text',
success: function (msg) {
if (msg.lastIndexOf(path) == -1) {
$(".ckfile").html(msg).css("color", "red");
}
else {
$('#showimg').attr('src', msg).attr("title", "我的头像");
$("#_userImgPath").val(msg);
}
}
});
} else {
$(".ckfile").html("文件格式错误。").css("color", "red");
return false;
}
}
}
后台代码:
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SS.Upload;
using WFC.Fenxiao;
namespace wanfangcheng
{
public partial class Upload : BasePage
{
//文件大小 1024 kb
private long size = 1024;
//文件类型
private string type = ".jpg|.jpeg|.png|.gif|.bmp";
//保存名称
string name = "";
//保存路径
private string path = @"Upload/UserImg";
//保存大小
private string shape = "100*100";
protected void Page_Load(object sender, EventArgs e)
{
HttpFileCollection files = Request.Files;
if (files != null && files.Count > 0)
{
name = BaseRole.Instance.UserId.ToString();
if (Request.QueryString["size"] != null)
{
size = Convert.ToInt32(Request.QueryString["size"]);
}
if (Request.QueryString["path"] != null)
{
path = Request.QueryString["path"].ToString().Trim().Replace('|', '/');
}
if (Request.QueryString["name"] != null)
{
name = Request.QueryString["name"].ToString().Trim();
}
if (Request.QueryString["shape"] != null)
{
shape = Request.QueryString["shape"].ToString().Trim();
}
uploadMethod(files);
}
}
/// <summary>
/// 上传图片
/// </summary>
/// <param name="hc"></param>
public void uploadMethod(HttpFileCollection hc)
{
HttpPostedFile _file = hc[0];
//文件大小
long _size = _file.ContentLength;
if (_size <= 0)
{
Response.Write("文件错误。");
Response.End();
return;
}
if (size * 1024 < _size)
{
Response.Write("文件过大,最大限制为" + size + "KB。");
Response.End();
return;
}
//文件名
string _name = _file.FileName;
//文件格式
string _tp = System.IO.Path.GetExtension(_name).ToLower();
if (type.IndexOf(_tp) == -1)
{
Response.Write("文件格式错误。");
Response.End();
return;
}
//保存路径
string _path = HttpContext.Current.Server.MapPath(path) + @"/" + name + _tp;
try
{
int w = Convert.ToInt32(shape.Split('*')[0]);
int h = Convert.ToInt32(shape.Split('*')[1]);
ImageHelper.CutForCustom(_file, _path, w, h, 50);
Response.Write(path + @"/" + name + _tp);
}
catch (Exception(www.61k.com])
{
Response.Write("哎呦,出错了。");
Response.End();
}
}
}
}
是不是很实用,也很简单易懂呢,以上是自己项目中使用的代码,小伙伴们如果发现有问题的地方,还请告之。谢谢
四 : asp利用文件上传组件upload_5xsoft文件上传
我们是利用upload文件上传组件进行文件上传哦。
<%Server.ScriptTimeOut=5000%>
<!--#include file="conn.asp"-->
<!--#include FILE="upload_5xsoft.inc"-->
<html>
<head>
<title>文件上传</title>
<link rel="stylesheet" href="<%=css%>" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>
<body>
<%dim upload,file,formName,formPath,iCount,exeec,wjm
set upload=new upload_5xsoft
formPath="FJ/"
ly=upload.form("content")
yhm=upload.form("yhm")
zid=upload.form("zid")
ys=upload.form("ys")
yyzm = upload.form("yzm")
zt=upload.form("zt")
ztid=upload.form("ztid")
cz=upload.form("cz")
tp=upload.form("tp")
if tp = "http://" then tp = ""
ly=xrzh(ly)
if cz = "" then
fhlj = "bbs_list.asp?zid="&zid
else
fhlj = "bbs_tj.asp?page=1000&zt="&zt&"&ztid="&ztid&"&zid="&zid
zid = ztid
end if
if yyzm <> session(sessionvalue & "yzm") then redirect fhlj
zhhf = jdsj
if yhm = "" then yhm = "游客"''request.servervariables("remote_addr")
for each formName in upload.objFile ''列出所有上传了的文件
set file = upload.file(formName)
if file.FileSize>0 then
kzm = lcase(right(file.filename,4))
if instr(",.mpg.asf.avi.mp3.swf.mpeg.png.gif.bmp.jpg.wma.wmv.txt",kzm)<= 0 then response.Redirect hflj
if file.filesize > 819200 then%>
<script language="javascript">
alert("文件大于800k!");
window.location="<%=fhlj%>";
</script>
<%end if
wjdx = file.filesize
wjm = formpath&replace(cstr(date),"-","") & cstr(Replace(Timer(), ".", "")) & kzm
file.SaveAs Server.mappath(wjm)
dx = cstr(file.filesize/1024)
if len(dx) >6 then dx=left(dx,6)
end if
next
if trim(zt) <>"" then
sql = "select * from yrwl_tb_lt order by id desc"
set rs = server.createobject("adodb.recordset")
rs.open sql,conn,1,3
if sjk <> "" then
if rs.eof then
id = "1"
else
id = cstr(rs("id")+1)
end if
end if
rs.addnew
if sjk = "" then
if rs.eof then
id = "1"
else
id = cstr(rs("id"))
end if
end if
rs("yhm") = yhm
rs("zt") = zt
rs("ly") = ly
if wjm = "" and tp <> "" then wjm = tp
rs("fj") = wjm
rs("dx") = dx
rs("dj") = 0
rs("zd") = "5"
rs("hf") = 0
if cz = "" then
rs("zid") = "s"
rs("zhhf") = jdsj & " "&yhm
rs("lb") = zid
else
rs("zid") = zid
sql = "select * from yrwl_tb_lt where id=" & zid
set rs1 = server.createobject("adodb.recordset")
rs1.open sql,conn,1,3
rs1("zhhf") = jdsj & " "&yhm
rs1.update
rs1.close
end if
rs("sj") = jdsj
rs.update
rs.close
if instr(yhm,".") = 0 and yhm <> "游客" then
exec="select * from yrwl_tb_admin where yhm='"&yhm&"'"
rs.open exec,conn,3,3
cs = rs("cs")
qm = rs("qm")
if isnull(cs) then cs = 0
if cs="" then cs=0
exec="update yrwl_tb_admin set cs=" & cstr( cs + 3 ) & " where yhm='" & yhm & "'"
conn.execute exec
end if
if cz = "" then
''读文件
if wjm <> "" then
kzm = lcase(right(wjm,3))
if instr(wjm,"http") = 0 then wjm = "../" & wjm
xswjm = gqzh(wjm)
if len(wjm)>4 and instr(wjm,"FJ")>0 then
tpxs = xswjm & "<br>附件下载:<a href=" & wjm & " target=_blank>[" & wjm &"]</a>"
else
tpxs = xswjm
end if
if tpxs = "" or (instr(wjm,"swf")>0) then tpxs = "<iframe id=kj name=kj frameborder=0 width=100% height=500 src="&wjm&"></iframe>"
end if
set fso = Server.Createobject("Scripting.FileSystemObject")
set file=fso.opentextfile(Server.mappath("tbtb.txt"),1,False)
do while file.AtEndOfStream<>true
wjnr = wjnr & file.ReadLine() & chr(13)
loop
file.close
set file = nothing
set fso = nothing
if isnull(qm) then qm = ""
ly = replace(ly,chr(13),"<br>")
wjnr = replace(wjnr,"$ti$",zt)
wjnr = replace(wjnr,"$sj$",jdsj)
wjnr = replace(wjnr,"$zt$", kill_keyword(zt))
wjnr = replace(wjnr,"$ly$", kill_keyword(ly) & "<br>" & tpxs & "--------------------------------------<Br> 个性签名:<a title="&qm&">"&qm&"</a>")
wjnr = replace(wjnr,"$zid$",zid)
wjnr = replace(wjnr,"$qm$",qm)
wjnr = replace(wjnr,"$ztid$",id)
if instr(yhm,".")>0 then yhm=left(yhm,instrrev(yhm,"."))&"*"
wjnr = replace(wjnr,"$fyr$",yhm)
wjnr = replace(wjnr,"$lxfs$",session(sessionvalue & "lxfs"))
''写文件
wj = Server.mappath( "tb/" & id & ".htm" )
set myfileobject=server.CreateObject("Scripting.FileSystemObject")
set mytextfile=myfileobject.CreateTextFile(wj)
mytextfile.WriteLine wjnr
mytextfile.close
end if
set file=nothing
set upload=nothing ''删除此对象
end if
conn.close
response.redirect fhlj%>
</body>
</html>
五 : 摘录网络 asp 上传代码 支持大文件上传
<%@Language="VBScript"CodePage=65001%>
<%OptionExplicit%>
<%
'Code:200(上传成功)、504(文件为空)、502(上传上限)、501(表示网络中断)、500(上传错误)、
'505(文件类型禁止上传),506(未设置允许的文件后缀),507(未设置上传路径)
'--------------------------------------------------------------------------------------
'--------------------------------------------------------------------------------------
Server.ScriptTimeout=99999999
Response.Buffer=True
Response.Charset="utf-8"
ConstUPLOAD_PATH="/upload/"
ClassUpload_Cls
PrivateobjUpStream,objConvertStream,objFso
PrivatelngMaxSize,lngRequestBytes,lngReadChunkBytes
PrivatestrCode
PrivatestrFileSuffix,strFilename,strAllowSuffix,strFilePath,lngFileSize,i
PrivateSubClass_Initialize()
Code=0
MaxSize=0
lngReadChunkBytes=131072'64KB
lngRequestBytes=CLng(Request.TotalBytes)
EndSub
PrivateSubClass_Terminate()
IfIsObject(objUpStream)Then
objUpStream.Close
SetobjUpStream=Nothing
SetobjConvertStream=Nothing
Endif
EndSub
'------
'定义允许上传的文件格式,用英文逗号隔开(,)形如:gif,jpg
'------
PublicPropertyLetAllowSuffix(strVal)
strAllowSuffix=LCase(strVal)
EndProperty
PublicPropertyGetFileName()
FileName=strFileName
EndProperty
PublicPropertyLetFileName(strVal)
strFileName=strVal
EndProperty
'------
'获取上传的文件后缀名
'------
PublicPropertyGetFileSuffix()
FileSuffix=strFileSuffix
EndProperty
PublicPropertyLetFileSuffix(strVal)
strFileSuffix=strVal
EndProperty
'------
'获取上传文件大小单位:KB
'------
PublicPropertyGetFileSize()
FileSize=lngFileSize
EndProperty
PrivatePropertyLetFileSize(lngVal)
lngFileSize=lngVal
EndProperty
'-------
'获取上传文件相对路径
'-------
PublicPropertyGetFilePath()
FilePath=strFilePath
EndProperty
'-------
'设置上传文件路径
'-------
PublicSubSetFilePath(strCurpath,n)
DimintRnd
SelectCasen
CaseElse
Randomize
intRnd=Int(9000*Rnd)
Randomize
intRnd=intRnd+Int(100*Rnd)
strFilePath=strCurpath&FormatTimePattern(Now(),"ymd")&"/"
EndSelect
CallCreateFolder(Server.MapPath(FilePath))
EndSub
'------
Rem根据时间生成的文件名
'------
PublicFunctionAutoFilePath()
AutoFilePath=FilePath&FileName
EndFunction
PublicFunctionFormatTimePattern(dateSTime,strPattern)
DimdateTime,strVal
dateTime=dateSTime
strVal=strPattern
strVal=Replace(strVal,"y",Year(dateTime))
strVal=Replace(strVal,"m",Fill0Char(Month(dateTime)))
strVal=Replace(strVal,"d",Fill0Char(Day(dateTime)))
strVal=Replace(strVal,"h",Fill0Char(Hour(dateTime)))
strVal=Replace(strVal,"n",Fill0Char(Minute(dateTime)))
strVal=Replace(strVal,"s",Fill0Char(Second(dateTime)))
FormatTimePattern=strVal
EndFunction
PrivateFunctionFill0Char(strVal)
IfLen(strVal)<2Then
Fill0Char="0"&strVal
Else
Fill0Char=strVal
EndIf
EndFunction
'------
'设置上传文件大小上限(单位:Bytes),默认4096KB
'------
PublicPropertyLetMaxSize(lngVal)
lngMaxSize=FormatNum(lngVal,4194304)
EndProperty
'------
'返回上传状态代码
'------
PublicPropertyGetCode()
Code=strCode
EndProperty
PrivatePropertyLetCode(strVal)
strCode=strVal
EndProperty
PublicSubGetFileData()
DimbinCrLf,binBoundary
DimlngFirstBoundary,lngEndBoundary
DimstrInfoHeader,strFieldName,strContentType,strItemValue
DimobjFileStream
DimintPos'临时位置
strContentType=""
IflngRequestBytes<1Then
Code=504
ExitSub
EndIf
IflngMaxSize<>0AndlngRequestBytes>lngMaxSizeThen
Code=502
ExitSub
EndIf
SetobjUpStream=Server.CreateObject("Adodb.Stream")
objUpStream.Mode=3
objUpStream.Type=1
objUpStream.Open
SetobjConvertStream=Server.CreateObject("adodb.stream")
objConvertStream.Mode=3
objConvertStream.Charset="utf-8"
binCrLf=ChrB(13)&ChrB(10)'换行符
lngFirstBoundary=ParseChunk(objUpStream,binCrLf,1)
binBoundary=SubBinString(1,lngFirstBoundary-1)'取得边界串
SetobjFileStream=NewFileInfo_Cls
DoWhileStrComp(SubBinString(lngFirstBoundary,2),binCrLf)=0
lngFirstBoundary=lngFirstBoundary+2
RemBegin分解表单项目
IfstrContentType=""Then
DoWhileTrue
lngEndBoundary=ParseChunk(objUpStream,binCrLf,lngFirstBoundary)
strInfoHeader=SubString(lngFirstBoundary,lngEndBoundary-lngFirstBoundary)
lngFirstBoundary=lngEndBoundary+2
intPos=InStr(strInfoHeader,":")
IfintPos=0ThenExitDo
IfintPos>0Then
IfStrComp(Left(strInfoHeader,intPos-1),"Content-Disposition",1)=0Then
'取表单项名称
strFieldName=ExtractValue(strInfoHeader,intPos+1,"name")
'取文件路径,取文件名称
FileName=ExtractFileName(ExtractValue(strInfoHeader,intPos+1,"filename"))
IfNotCheckSuffix(FileName)ThenExitSub
ElseIfStrComp(left(strInfoHeader,intPos-1),"Content-Type",1)=0Then
'取文件类型
strContentType=Trim(Mid(strInfoHeader,intPos+1))
EndIf
EndIf
Loop
EndIf
RemEnd表单项目结束
IfFileName<>""Then
'掐头后移入流对象
MoveStreamobjUpStream,objFileStream.Stream,lngFirstBoundary
lngEndBoundary=ParseChunk(objFileStream.Stream,binBoundary&binCrLf,1)
'流对象去尾
MoveStreamobjFileStream.Stream,objUpStream,lngEndBoundary
lngFirstBoundary=lngFirstBoundary+2+LenB(binBoundary)
Else
lngEndBoundary=ParseChunk(objUpStream,binBoundary,lngFirstBoundary)
strItemValue=SubString(lngFirstBoundary,lngEndBoundary-2-lngFirstBoundary)
'移动位置
lngFirstBoundary=lngEndBoundary+LenB(binBoundary)
EndIf
Loop
Code=200
FileSize=objFileStream.FileSize
SetobjFso=Server.CreateObject("Scripting.FileSystemObject")
CallCheckFile
SetobjFso=Nothing
objFileStream.SaveAs(Server.MapPath(AutoFilePath))
SetobjFileStream=Nothing
EndSub
PrivateSubCheckFile()
IfobjFso.FileExists(Server.MapPath(AutoFilePath))Then
FileName="[1]"&strFileName
CallCheckFile
EndIf
EndSub
PrivateFunctionExtractValue(strString,startPos,strName)
DimstrVal
DimstrCurPos,intCurPos
Dimn1,n2
strVal=strString
strCurPos=strName&"="""
intCurPos=InStr(startPos,strVal,strCurPos)
IfintCurPos>0Then
n1=intCurPos+Len(strCurPos)
n2=InStr(n1,strVal,"""")
ifn2>n1thenExtractValue=Mid(strVal,n1,n2-n1)
EndIf
EndFunction
PrivateFunctionSubBinString(StartPos,ReadLen)
DimlngStartPos,lngReadLen
DimbinBoundary
lngReadLen=ReadLen
IflngReadLen=0ThenSubBinString="":ExitFunction
lngStartPos=StartPos
IfobjUpStream.Size<lngStartPos+lngReadLen-1ThenReadChunk2StreamobjUpStream
objUpStream.Position=lngStartPos-1
binBoundary=objUpStream.Read(lngReadLen)
SubBinString=MidB(binBoundary,1)
EndFunction
PrivateFunctionSubString(StartPos,ReadLen)
DimlngStartPos,lngReadLen
DimbinBoundary
lngReadLen=ReadLen
IflngReadLen=0ThenSubString="":ExitFunction
lngStartPos=StartPos
IfobjUpStream.Size<(lngStartPos+lngReadLen-1)ThenReadChunk2StreamobjUpStream
objUpStream.Position=lngStartPos-1
binBoundary=objUpStream.Read(lngReadLen)
WithobjConvertStream
.Type=1
.Open
.WritebinBoundary
.Position=0
.Type=2
SubString=.ReadText
.Close
EndWith
EndFunction
Rem解析一个块
PrivateFunctionParseChunk(obj,Boundary,StartPos)
'读取块的起始位置,找到边界的位置(0表示没有)
DimlngStartPos,lngFoundPos,lngBoundaryLen
DimbinChunk
lngStartPos=StartPos
lngFoundPos=0
lngBoundaryLen=LenB(Boundary)
DoWhilelngFoundPos=0
'数据流长度不够时,读取一个块(lngReadChunkBytes)
Ifobj.Size<(lngStartPos+lngBoundaryLen-1)ThenReadChunk2Streamobj
obj.Position=lngStartPos-1
binChunk=obj.Read
lngFoundPos=InstrB(binChunk,Boundary)
'未找到边界,则向后移动一个位置
IflngFoundPos=0ThenlngStartPos=lngStartPos+LenB(binChunk)-lngBoundaryLen+1
Loop
ParseChunk=lngStartpos+lngFoundPos-1
EndFunction
PrivateSubReadChunk2Stream(obj)
IfResponse.IsClientConnected=FalsethenCode=501:ExitSub
obj.Position=obj.Size
obj.WriteRequest.BinaryRead(lngReadChunkBytes)
EndSub
PrivateSubMoveStream(FromStream,ToStream,StartPos)
FromStream.Position=StartPos-1
ToStream.Position=ToStream.Size
FromStream.CopyToToStream
FromStream.Position=StartPos-1
'将流对象的结束设定到当前位置
FromStream.SetEOS
EndSub
PrivateFunctionExtractFileName(strString)
DimstrVal
strVal=Replace(strString,Chr(0),"")
strVal=Replace(strVal,"","")
strVal=Replace(strVal,"..","")
strVal=Replace(strVal,"'","")
strVal=Replace(strVal,"[","")
strVal=Replace(strVal,"]","")
strVal=Replace(strVal,"<","")
strVal=Replace(strVal,">","")
strVal=Replace(strVal,"*","")
strVal=Replace(strVal,"&","")
ExtractFileName=Mid(strVal,InStrRev(strVal,"")+1)
EndFunction
PrivateFunctionCheckSuffix(strA)
DimstrSeparate,strTempFileSuffix
CheckSuffix=True
strSeparate=",asp,asa,cer,aspx,php,cdx,htr,shtm,shtml,stm,idc,"
FileSuffix=LCase(Mid(strA,InStrRev(strA,".")+1))
strTempFileSuffix=","&strFileSuffix&","
IfInStr(strSeparate,strTempFileSuffix)>0Then
Code=505
CheckSuffix=False
ExitFunction
EndIf
EndFunction
PrivateFunctionCreateFolder(strFolderPath)
DimsPath,i,strTempPath,n,objFso,RootPath
CreateFolder=False
SetobjFso=Server.CreateObject("Scripting.FileSystemobject")
IfobjFso.FolderExists(strFolderPath)Then
CreateFolder=True
ExitFunction
EndIf
RootPath=Server.MapPath("/")&""
sPath=Split(strFolderPath,"")
strTempPath=""
n=UBound(Split(RootPath,""))
Fori=nToUBound(sPath)
strTempPath=strTempPath&sPath(i)&""
IfNotobjFso.FolderExists(RootPath&strTempPath)Then
objFso.CreateFolder(RootPath&strTempPath)
EndIf
Next
SetobjFso=Nothing
IfErr=0Then
CreateFolder=True
Else
CreateFolder=False
EndIf
EndFunction
PrivateFunctionFormatNum(intVal,DefaultVal)
IfNotIsNumeric(intVal)Then
FormatNum=Clng(DefaultVal)
Else
FormatNum=Clng(intVal)
EndIf
EndFunction
EndClass
ClassFileInfo_Cls
PrivateobjFileStream
PublicFunctionFileSize()
DimlngSize
lngSize=objFileStream.Size
FileSize=CLng(lngSize/1024)
EndFunction
PublicPropertyGetStream()
SetStream=objFileStream
EndProperty
PublicSubSaveAs(strFilePath)
OnErrorResumeNext
objFileStream.SaveToFilestrFilePath,2
IfErr.Number>0ThenResponse.Write"UploadErr:"&Err.Description&"<br>":ExitSub
EndSub
PrivateSubClass_Initialize
SetobjFileStream=CreateObject("Adodb.Stream")
objFileStream.Mode=3
objFileStream.Type=1
objFileStream.Open
Endsub
PrivateSubClass_Terminate
objFileStream.Close
SetobjFileStream=Nothing
Endsub
EndClass
Dimaction
DimobjUpload,objFile
action=Trim(Request.QueryString("action"))
Response.Write"<br>"
SelectCaseaction
Case"save"
CallSave
Case"list"
CallFileList
CaseElse
CallHeader
EndSelect
SubSave()
Dimstime,etime
stime=Timer
SetobjUpload=NewUpload_Cls
objUpload.AllowSuffix=""
objUpload.MaxSize=0
objUpload.SetFilePathUPLOAD_PATH,1
CallobjUpload.GetFileData
etime=Timer
Response.Write"上传执行代码Code:"&objUpload.Code&"<br>"
Response.Write"文件路径:"&objUpload.AutoFilePath&"<br>"
Response.Write"文件大小:"&objUpload.FileSize&"KB<br>"
Response.Write"执行时间:"&FormatNumber((etime-stime),2)&"second"
SetobjUpload=Nothing
CallHeader
EndSub
SubHeader()
%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title></title>
<tablewidth="600"border="0"cellspacing="0"cellpadding="0">
<br><br><br><br><br>
'Code:200(上传成功)、504(文件为空)、502(上传上限)、501(表示网络中断)、500(上传错误)、
'505(文件类型禁止上传),506(未设置允许的文件后缀),507(未设置上传路径)
<formaction="?action=save"method="post"enctype="multipart/form-data"name="form1">
<tralign="center">
<tdwidth="80"height="46">选择地址:</td>
<tdwidth="300">
<inputname="uploadfile"type="file"id="uploadfile"size="30"></td>
<tdwidth="60"><inputtype="submit"name="Submit"value="上传"></td>
</tr>
<tralign="center">
<tdheight="20"colspan="3"><inputtype="button"name="Submit"value="关闭"onClick="window.close();"></td>
</tr>
</form>
</table>
<%
EndSub
SubFileList()
DimstrPath
DimobjFso,objUpload
DimobjFolders,objFiles,Folder,File
DimstrThisPath
SetobjUpload=NewUpload_Cls
strPath=Trim(Request.QueryString("path"))
IfLen(strPath)=0Then
strThisPath=UPLOAD_PATH&objUpload.FormatTimePattern(Now(),"ymd")&"/"
ElseIfCStr(LCase(strPath))="/upload/"Then
strThisPath=UPLOAD_PATH
Else
strThisPath=UPLOAD_PATH&strPath
EndIf
%>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=utf-8">
<title></title>
<br>
<tablewidth="780"align="center"border="0"cellspacing="1"cellpadding="0"bgcolor="#CCCCCC">
<ahref="?action=list&path=/upload/">返回上一个路径:</a>
<br><br>
当前路径:<%Response.WritestrThisPath%>
<br><br>
<trbgcolor="#EFEFEF">
<tdalign="center"class="row-pathtopic">文件夹/文件名</a></td>
<tdalign="center"height="30">大小</td>
<tdalign="center">文件类型</td>
<tdalign="center">创建时间</td>
<tdalign="center">修改时间</td>
</tr>
<%
SetobjFso=Server.CreateObject("Scripting.FileSystemObject")
SetobjFolders=objFso.GetFolder(Server.MapPath(strThisPath))
ForEachFolderInobjFolders.subFolders
%>
<trbgcolor="#FFFFFF">
<tdheight="30"><ahref="?action=list&path=<%=Folder.Name%>"><%=Folder.Name%></a></td>
<tdalign="center"><%=FileSize(Folder.Size)%></td>
<tdalign="center"><%=Folder.Type%></td>
<tdalign="center"><atitle="创建时间"><%=objUpload.FormatTimePattern(Folder.DateCreated,"y-m-dh:n:s")%></a></td><td><atitle="修改时间"><%=objUpload.FormatTimePattern(Folder.DateLastModified,"y-m-dh:n:s")%></a></td>
</tr>
<%
Next
ForEachFileInobjFolders.Files
%>
<trbgcolor="#FFFFFF">
<tdheight="30"><ahref="<%=strThisPath&"/"&File.Name%>"><%=File.Name%></a></td>
<tdalign="center"><%=FileSize(File.Size)%></td>
<tdalign="center"><%=File.Type%></td>
<tdalign="center"><atitle="创建时间"><%=objUpload.FormatTimePattern(File.DateCreated,"y-m-dh:n:s")%></a></td><td><atitle="修改时间"><%=objUpload.FormatTimePattern(File.DateLastModified,"y-m-dh:n:s")%></a></td>
</tr>
<%
Next
SetobjFolders=Nothing
SetobjFso=Nothing
SetobjUpload=Nothing
%>
</table>
</body>
</html>
<%
EndSub
FunctionFileSize(intSize)
FileSize=CLng(intSize/1024)&"K"
EndFunction
%>
本文标题:
asp文件上传-[ASP.NET] 限制上传文件类型的两种方法 本文地址:
http://www.61k.com/1060443.html