ASP实现文件上传的方法 |
|
一.基于ASP的文件上传实现原理分析 <html> <body> <form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp"> <input type="file" name="FileName"> <INPUT TYPE="Submit" VALUE="Upload"></TD> </form> </body> </html> 程序中使用了文件对象,这样在Upload.asp中采用BinaryRead方法读来的原始数据就不仅仅是选择的文件本身的数据,还包含该文件在用户硬盘上的路径、类型、提交页面的表单域名等相关信息的描述,这样我们就需从中提取出文件的具体内容 。根据分析,数据的头部信息与数据的分界线是两对回车换行符,尾部也有分隔信息,我们可以采用类似以下的方法获取文件数据 。 Dim FormData.FormSize,DataStart,CLStr,DivStr FormSize=Request.TotalBytes FormData=Request.BinaryRead(FormSize) CLStr=ChrB(13)&ChrB(10) DataStart=InStrB(FormData.CLStr&CLStr)+4 4是两对回车换行符的长度 DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1) DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2 FormData=MidB(FormData,DataStart,DataSize) FormData就是文件的内容了 。 中间根据需要,可进行相应的处理 。最后的工作就是将文件保存了 。保存的方法可以有两种:一种是利用VB或VC之类程序中的二进制文件操作方法,在工程中加入适当的类型库,最终编译成DLL文件,使用时再将该DLL文件注册就可以了 。文件存贮程序如下:
Public Function SaveFile(Pathname As String) As String
Dim objContext As ObjectContext
Dim objRequest As Request
Set objContext=GetObjectContext()
Set objRequest=objContext("Request")
以下的一段代码是进行文件存贮的有关操作
Dim FormData() As Byte,CLStr,DivStr
Dim DataStart As Long,DataSize As Long
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
创建一个二进制文件并将FormData写入其中
Open Pathname For Binary As 1
Put #1,,FormData
Close #1
SaveFile="OK!"
End Function
第二种方法是利用ADO STREAM中提供的二进制文件操作方法来完成,保存文件的语句是: StreamOBJ.SaveToFile (fileName,2) 。在 这种操作中,我们可以将有关的操作存放在一个类文件中,在应用时,直接将该类文件包含在ASP程序中就可以了 。具体处理方法,请参阅有关介绍 。 <!--#include FILE="upload.inc"--> set upload=new upload_5xSoft 建立上传对象 有关的属性与操作方法,请参阅该组件的使用手册 。
<% @ language="vbscript"
Set fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:\upfile"
fileUP.Upload
For i=0 to fileUP.Count
fieldname=fileUP.FieldName(i)
If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
fileUP.Save fieldname
End If
Next
Set fileUP=Nothing
%>
浏览器/服务器应用模式还在快速地发展着,在微软新推出的ASP.NET中,已经内置了文件上传的功能,使用非常简单方便 。作为一种全新的技术,ASP.NET并不只是ASP的简单升级,它是一个用于Web开发的全新框架,其中包含了许多新的特性 。ASP.NET提供了更易于编写、结构更清晰的代码,利用这些代码我们将会更容易地进行再利用和共享,从而开发出更多更实用的程序来 。 |