一键采集上传常见的细节问题( 基于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 提供了更易于编写、结构更清晰的代码,我们可以更轻松地重用和共享这些代码,以开发更有用的程序。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线