首页 > 编程 > ASP > 正文

用ASP和VBScript上载文件(二)

2024-05-04 11:06:34
字体:
来源:转载
供稿:网友
上载脚本的使用
  
    下面是开发的上载脚本的应用范例。本文的下载文件提供例子中的文件和代码。将压缩文件释放到一个路径下,为你的网络服务器配置一个虚拟路径。可以在浏览器中测试和启动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:/temp)。也可以是相对的,到网络服务器定义的一个虚拟路径下。用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代码中的上载变量到数据库或文件系统中存储上载文件。
  
    点击下面的链接,下载<a href="http://www.asptoday.com/articles/images/20000316.zip">本文的例程代码。

  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表