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的这些动词,并在你的应用程序中解释内容。
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程序中就可以了。具体处理方法,请参阅有关介绍。
<!--#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
%>
四.结束语