一键采集上传常见的细节问题( 基于ASP的文件上传实现方法实例实现文件可使用组件或无组件方式)
优采云 发布时间: 2022-01-28 10:04一键采集上传常见的细节问题(
基于ASP的文件上传实现方法实例实现文件可使用组件或无组件方式)
ASP实现文件上传的方法
更新时间:2015-09-24 11:30:58 发布者:lijiao
在基于浏览器/服务器的应用环境中,在浏览器中上传各类文件一直是困扰用户文件管理应用的难题之一。常见的实现方法是使用 RFC1867 中引入的一种新类型:File 和 ADO Stream 对象。本文讨论了上述上传方法和实现原理,并给出了具体的解决方案示例。
一。基于ASP的文件上传实现原理分析
基本原理是:使用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出,从中剪出需要的文件数据,保存为二进制文件。
以下是上传文件页面(upload.htm)的示例:
<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>
程序中使用了file对象,使得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程序中。具体处理方法请参考介绍。
二。文件上传实现方法示例
文件上传可以使用组件实现,也可以不使用组件实现。对于组件类,比如microsoftpostingacceptor(简称mpa),是微软发布的免费服务端组件,此类组件的安装也比较方便。对于 Microsoft 的 mpa,运行它的设置文件就可以了。一般dll组件的形式,我们需要注册。例如使用aspcnUP.dll,在Window 2000上执行regsvr32 [path\]aspcnUP.dll,系统会提示注册成功,即可使用该组件;对于没有组件的类,在使用的时候,只要在处理程序中加入如下语句即可:
<!--#include FILE="upload.inc"-->
set upload=new upload_5xSoft '建立上传对象
属性和操作方法请参考该组件的用户手册。
以下是aspcnUP.dll组件上传某些类型文件(upload.asp)源代码的示例:
<% @ 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 提供了更易于编写、结构更清晰的代码,我们可以更轻松地重用和共享这些代码,以开发更有用的程序。