ASP实现文件上传的方法(最简单asp上传文件)难以置信

随心笔谈2年前发布 编辑
172 0
🌐 经济型:买域名、轻量云服务器、用途:游戏 网站等 《腾讯云》特点:特价机便宜 适合初学者用 点我优惠购买
🚀 拓展型:买域名、轻量云服务器、用途:游戏 网站等 《阿里云》特点:中档服务器便宜 域名备案事多 点我优惠购买
🛡️ 稳定型:买域名、轻量云服务器、用途:游戏 网站等 《西部数码》 特点:比上两家略贵但是稳定性超好事也少 点我优惠购买



一.基于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>

程序中使用了文件对象,这样在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程序中就可以了。具体处理方法,请参阅有关介绍。

二.文件上传实现方法实例

实现文件上传可使用组件或无组件方式。对于组件类,比如说microsoft posting acceptor(简称mpa),就是微软公司发布的一个免费服务器组件,这类组件的安装也比较方便。对于微软的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:?e”
  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提供了更易于编写、结构更清晰的代码,利用这些代码我们将会更容易地进行再利用和共享,从而开发出更多更实用的程序来。

您可能感兴趣的文章:Asp.Net超大文件上传问题解决Asp.Net 无刷新文件上传并显示进度条的实现方法及思路asp.net 文件上传实例汇总asp.net文件上传示例分享ASP.NET实现的简单易用文件上传类ASP.NET对大文件上传的解决方案asp.net批量多选文件上传解决方案ASP.NET设计FTP文件上传的解决方案asp将本地的文件上传到服务器asp.net文件上传带进度条实现案例(多种风格)asp.net文件上传解决方案(图片上传、单文件上传、多文件上传、检查文件类型)ASP.NET MVC5实现文件上传与地址变化处理(5)

© 版权声明

相关文章