ASP 组件 FILE对象
当前,基于浏览器/服务器模式的应用比较流行。当用户需要将文件传输到服务器上时,常用方法之一是运行FTP服务器并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录。这就要求用户必须懂得如何使用FTP客户程序。因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行的。 如果我们能把文件上传功能与Web集成,使用户仅用Web浏览器就能完成上传任务,这对于他们来说将是非常方便的。但是,一直以来,由于File System Object的仅能传送文本文件的局限,所以ASP最大的难题就是文件上传问题。下面介绍的就是如何在基于HTTP协议的网页中实现文件的上传。
一.通过HTTP上传的三种机制
通过HTTP上传有三种机制:RFC1867, PUT 和 WebDAV。
PUT 是在HTTP 1.1引入了一个新的HTTP动词。当web服务器收到一个HTTP PUT和对象名字,它将会验证用户,接收HTTP流的内容,并把它直接存入web服务器。由于这可能会对一个web站点造成破坏,并且还会失去HTTP最大的优势:服务器可编程性。在PUT的情况下,服务器自己处理请求:没有空间让CGI或者ASP应用程序介入。唯一让你的应用程序捕获PUT的方法是在低层操作,ISAPI过滤层。由于相应的原因,PUT的应用很有限。
而WebDAV允许web内容的分布式认证与翻译。它引入了几种新的HTTP动词,允许通过HTTP上传,锁定/解锁,登记/检验web内容。Office 2000中的"Save to web" 就是通过WebDAV来实现的。如果你所感兴趣的一切都是上传内容,WebDAV应用得非常出色,它解决了很多问题。 然而,如果你需要在你的web应用程序里面上传文件,WebDAV对你就毫无用处可言。象HTTP PUT一样,那些WebDAV的动词是被服务器解释的,而不是web应用程序。你需要工作在ISAPI过滤层来访问WebDAV的这些动词,并在你的应用程序中解释内容。
RFC1867 (http://www.ietf.org/rfc/rfc1867.txt) 最终被W3C在HTML3.2中接受前,是作为一种建议标准。它是一种非常简单但是功能很强大的想法:在表单字段中定义一个新类型。
<INPUT TYPE="FILE">
并且在表单本身加入了不同的编码方案,不再使用典型的:
<FORM ACTION="formproc.asp" METHOD="POST">
而是使用:
<FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data">
这种编码方案在传送大量数据的时候,比起缺省的"application/x-url-encoded"表单编码方案,显得效率要高得多。URL编码只有很有限的字符集,使用任何超出字符集的字符,必须用'%nn'代替,这里的nn表示相应的2个十六进制数字。例如,即使是普通的空格字符也要用'%20'代替。而RFC1867使用多部分MIME编码,就象通常在e-mail消息中看到的那样,不编码来传送大量数据,而只是在数据周围加上很少的简单但实用的头部。主要浏览器的厂商都采用了建议的"浏览..."按钮,用户能很容易的使用本地"打开文件..." 对话框选择要上传的文件。
RFC1867仍然将大多数文件上传的灵活方法留给了你的web应用程序。PUT用得很有限。WebDAV对内容的作者很有用,比如FrontPage用户,但是对想在web应用程序中加入文件上传的web开发者来说很少用到。因此,RFC1867是在web应用程序中加入文件上传的最好的办法。
在实际应用中,微软免费提供了Posting Acceptor 。ASP不懂"multipart/form-data" 编码方案。取而代之,微软提供了Posting Acceptor ,Posting Acceptor是一种在上传完成后,接受REPOST到一个ASP页的ISAPI应用程序。
Software Artisans的SA-FileUp是最早的商业Active Server组件之一。几经改进,现在作为一个纯粹的ASP组件存在。
二.基于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程序中就可以了。具体处理方法,请参阅有关介绍。
分享到:
相关推荐
### ASP无组件上传原理详解 #### 一、引言 在Web开发中,文件上传是一项基本而重要的功能,尤其在不依赖于第三方组件的情况下实现这一功能,不仅考验开发者的技术水平,还能深入理解HTTP协议和MIME类型的工作机制...
5. 编码说明:代码中的“”指明ASP页面使用VBScript脚本语言编写,这是ASP开发中常用的脚本语言之一。 6. 文件处理:上传的文件通常需要通过某些方式处理,比如保存到服务器的文件系统中。FileInfo类会涉及到文件的...
风声 ASP 无组件上传类 是当前效率最高的ASP无组件上传程序之一。 风声 ASP 无组件上传类 自其V1.0发布就有自己鲜明的特点——易用;V1.02功能进一步加强,并且奠定了其在同类程序中高效率的地位;V2.0秉承其易用...
ASP先锋无组件上传类是一个专为ASP(Active Server Pages)平台设计的安全上传组件,它强调了安全性,无需使用FileSystemObject(FSO)组件,从而避免了因FSO引发的潜在安全问题。在ASP环境中,FSO允许程序对服务器...
在ASP(Active Server Pages)开发中,上传功能是常见的需求之一,例如用户可能需要上传图片、文档等。传统的上传方式通常依赖于特定的组件或控件,如ASPUpload、Chilkat ASP Upload等,但这些组件可能会带来额外的...
在“asp上传大全之三ajax上传组件”这个主题中,重点学习和理解的内容包括: - ASP的文件上传机制,包括`<input type="file">`控件的使用,`Request`对象如何获取文件数据。 - JavaScript的XMLHttpRequest对象和...
化境ASP无组件上传程序 v2.0是一个专为ASP(Active Server Pages)开发者设计的文件上传解决方案。在ASP环境中,通常需要借助第三方组件来实现文件上传功能,但这款程序的独特之处在于它无需任何额外的组件,即可...
总的来说,用VB制作ASP组件是一项将VB的强大力量引入Web开发的过程,通过自定义组件可以实现更复杂的功能,提高代码复用性和可维护性。然而,这也需要开发者具备扎实的VB基础,对ASP的工作原理有深入理解,并能熟练...
在IT领域,图片上传是网页应用中常见的功能之一,尤其对于社交媒体、电商平台或者内容创作平台而言,用户能够方便地上传图片至关重要。"最好的无组件图片上传插件-带JS预览功能"是一款专为此目的设计的高效解决方案...
AspUpload是流行的ASP上传组件之一,由HiNet公司开发。它提供了丰富的功能,包括上述的基本上传功能以及自定义错误处理、上传完成后执行脚本、支持断点续传等高级特性。 - 自定义错误处理:AspUpload允许开发者...
这个压缩包“ASP实例开发源码-ASP文件批量上传客户端免费组件.zip”包含了ASP技术的一个具体应用实例,即文件批量上传功能的客户端组件。在Web开发中,文件上传功能是常见的需求,例如用户在注册、发布内容或提交...
在ASP上传大全中,"iframe上传组件"是解决文件上传问题的一种常见方法。iframe,全称Inline Frame,是一种HTML标签,允许在一个HTML文档中嵌入另一个HTML文档。在文件上传场景中,iframe常被用来异步处理文件上传,...
本文将介绍两种主要的图片上传方式:间接法和直接法,并探讨ASP在这一过程中的具体应用。 ### 间接法 间接法的核心思想是将图片文件保存在服务器的文件系统中,而将图片的文件名存储到数据库中。这种方法的优点是...
"无组件上传"是该系统的亮点之一,它避免了安装和配置第三方组件的需求,简化了部署过程。ASP内置的FileUpload控件被用来实现文件上传功能,通过HTTP协议将文件从客户端传输到服务器端,确保了商品图片的顺利上传和...
在ASP上传大全之二中,我们关注的是“弹窗上传组件”。这个组件是为了解决在网页上实现文件上传功能而设计的,尤其适用于需要用户交互上传文件的场景,如提交表单、上传图片或文档等。 弹窗上传组件通常指的是一个...
【w3uploadTrial 上传组件】是Dimac公司推出的一款专用于文件上传的ASP组件,它为Web开发者提供了一种高效、便捷的方式来处理用户在网页上进行文件上传的需求。这款组件的强大之处在于其易用性与灵活性,可以方便地...
『风声无组件上传类』是当前效率最高的ASP无组件上传程序之一。 『风声无组件上传类』自其V1.0发布就有自己鲜明的特点——易用;V1.02功能进一步加强,并且奠定了其在同类程序中高效率的地位;V2.0秉承其易用高效...
艾恩ASP上传组件是一款专门针对ASP平台设计的文件上传解决方案。它提供了方便的API和丰富的功能,使得开发者能够轻松地在ASP应用程序中集成文件上传功能。以下是对艾恩ASP上传组件的详细解析: 1. **基本功能**:该...
标题 "Delphi写ASP组件实现快速多文件WEB上传" 提示我们关注的是一个使用Delphi编程语言编写的ASP(Active Server Pages)组件,这个组件的主要功能是优化和加速Web环境下的多文件上传过程。在ASP中,这样的组件通常...
总之,ASPUpload组件是ASP环境中实现文件上传功能的强大工具,其丰富的功能和良好的平台兼容性使其成为开发者们的首选之一。通过学习和掌握它的使用,你将能够为你的Web应用添加安全、高效的文件上传功能。