二.基于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程序中就可以了
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器