当前位置: 移动技术网 > IT编程>开发语言>Asp > ASP实现文件上传的方法

ASP实现文件上传的方法

2017年12月08日  | 移动技术网IT编程  | 我要评论

一.基于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:\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提供了更易于编写、结构更清晰的代码,利用这些代码我们将会更容易地进行再利用和共享,从而开发出更多更实用的程序来。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网