用ASP和VBScript上载文件(二)

作者:不详 来源: 日期:2002-7-30
上载脚本的使用 

  下面是开发的上载脚本的应用范例。本文的下载文件提供例子中的文件和代码。将压缩

件释放到一个路径下,为你的网络服务器配置一个虚拟路径。可以在浏览器中测试和启动
uploadForm.html。 

调用脚本 

  下面是调用上载BuildUploadRequest 方法的途径。首先调用一个全程dictionary:
UploadRequest。然后调用BuilUploadRequest方法,然后在自变量中传送到请求原始二进制

据。 


byteCount = Request.TotalBytes 

RequestBin = Request.BinaryRead(byteCount) 

Dim UploadRequest 

Set UploadRequest = CreateObject("Scripting.Dictionary") 

BuildUploadRequest RequestBin 

  数据被分解并存储在dictionary对象中,并用Item() 方法恢复。这些item 数据可以

存在VBScript 变量中,并且可以在代码的任何地方使用。数据可以作为响应传送回客户
机,或
用在ASP代码中,或写进文件中及放入数据库中。 



取回数据 



  UploadRequest 对象的数据可用Item("key") 函数进行存取。现在来考虑一下这样的

况:要存取一个 email控制的值。可以这样做: 



email = UploadRequest.Item("email").Item("Value") 



  因为这是一个文本类控制,内容是一个字符串,这个字符串可以同任何其它VBScript 
字符
串一样使用。 对于二进制数据,可以用相同方法恢复内容: 



picture = UploadRequest.Item("blob").Item("Value") 



  也可以存取其它信息,如文件名和content-type。他们是文本类控制。 



contentType = UploadRequest.Item("blob").Item("ContentType") 

filepathname = UploadRequest.Item("blob").Item("FileName") 



在 VBScript 代码中使用数据 



  上载的数据可以同其它变量一样在VBScript 代码中使用。比如说,它们可以作为响应
发送
回客户机。 



Your email is : 〈%=email%〉 

File name of you picture is 〈%=filepathname%〉 

File type of your picture is 〈%=contentType%〉 



  二进制数据也可以发送回客户机。必须设置一个content-type,可以用BinaryWrite 方

写二进制数据。 



Response.ContentType = contentType Response.BinaryWrite picture 



向文件中写入上载数据 



  在文件类控制的情况下,目的通常是将二进制数据存入某个文件或数据库域,而不是将

们传送回客户机。这个目的是上载文件的固有特点。使用FileSystem对象将上载文件存入服

器的文件系统中。 



  首先创建FileSystem对象: 



’Create FileSytemObject Component Set ScriptObject = Server.CreateObject
("Scripting.FileSystemObject") 



  用FileSystem对象在路径中创建一个文件。路径可以是绝对的,直接指向文件系统(如
c: 
emp)。也可以是相对的,到网络服务器定义的一个虚拟路径下。用mappath方法和
PATH_INFO服
务器变量将虚拟路径影射到绝对路径。 



  Write方法需要一个双字节字符串作为自变量,所以要将单字节数列转换成字符串。
Write
方法负责转换这个双字节字符串,并用ASCII 格式写它。这就建立了一个包含我们原始的单

节字符串的二进制内容的文件。我已将这个文件命名为“uploaded+filename”,这只是为

区别文件,你可以使用任何其它文件名,如: 



’Create and Write to a File Set MyFile = ScriptObject.CreateTextFile
(Server.mappath(Request.ServerVariables _ ("PATH_INFO")) & "uploaded" & 
filename) 

For i = 1 to LenB(value) 

MyFile.Write chr(AscB(MidB(value, i, 1))) 

Next 

MyFile.Close 



将上载数据存入数据库 



  数据还可以被存入数据库。content-type 也应该存入数据库中,以便以后显示数据。
首先
要建立与数据库的连接,假定已经设置了适当的DSN: 



Set conn = Server.CreateObject("ADODB.Connection") 

conn.open "DSN=wroxdns","user","pass" 

然后从连接中创建记录集: 



sql = "SELECT PHOTO, CONTENTTYPE FROM MYTABLE" 

Set rs = Server.CreateObject("ADODB.Recordset") 

rs.Open sql, conn, 3, 3 

记录集创建之后,要将二进制数据放入数据库的blob域中: 



picturechunk = picture & chrB(0) 

rs.Fields("PICTURE").appendChunk picturechunk 

rs.Fields("CONTENTTYPE") = contentType 

rs.Update 

conn.close 



  在appendChunk 方法中,我不得不解决一个臭虫。事实上我注意到,当二进制数据有奇

字节时,appendChunk 方法就不传送最后一个字节。解决的办法是增加一个chr(0),以确

传送了所有的字节。也许还有其它办法,如果有的话,请告诉我。 



  要得到数据库的映象,使用相同的记录集,并用正确的内容类型将它作为响应发送回客

机。 



Response.contentType = rs.Fields("CONTENTTYPE") 

size = rs.Fields("PICTURE").ActualSize 

blob = rs.Fields("PICTURE").GetChunk(size) 

Response.binarywrite blob 



结论 

  本文展现了一个完整的用VBScript 进行文件上载的方法。编码完全是VBScript ,独立

第三方产品。 

  首先集中介绍上载的过程(用" multipart/form-data "型内容进行HTML传递)。然后
详细
介绍上载的 VBScript代码。开始时对操作字符串和单字节数列的VBScript函数进行简要回
顾。
然后介绍了脚本的代码 以及上载数据的结构。 

  最后显示了这个脚本的多个用途,从使用ASP代码中的上载变量到数据库或文件系统中
存储
上载文件。 
相关文章