Z-Blog是如何上传文件的

    From: xuyibo.org  Updated: 2021-07-10

    邮件通知当更新时自动发送邮件通知。
    评论本文有什么建议或评论,可以贴一下。
    我要捐助你的支持,让我们做的更好。

    当asp以UTF8编码时,上传表达中上传文件的路径名也是以UTF8编码的。而且在enctype=”multipart/form-data”方式下,上传处理页面必须使用Request.BinaryRead方式来进行后续操作。但由于微软的Request只要调用了BinaryRead就不能使用Request.Form(反之亦然),这给无组件文件上传带来很多麻烦。下面是最近看Z-Blog源码后的一些笔记。

  1. Z-Blog是如何上传文件的
  2. 表单代码在c_system_event.asp: Function UploadFile(bolAutoName,bolReload)

    处理代码在c_system_lib.asp中的UpLoad_Form。

    其中比较有技巧性的是上传文件名采用url参数传递,也就是说后台用request.querystring来获取文件名。微软说request.form和request.BinaryRead有冲突,但没有说和querystring也冲突。这样避免了在提交的表单数据中解析文件名,以及UTF8到当前字符集的转换。表单提交按钮点击后触发的OnClick操作:

    document.getElementById("edit").action=document.getElementById("edit").action+ 
    "&filename;="+escape(document.getElementById("edtFileLoad").value)
    
  3. 代码片段
  4. Z-Blog的代码为(Xml_Upload.asp中):

    	// Function UpLoad_Form()
    	// 将表单数据写入到一adodb stream,并读取文件数据到Stream。
    	With objStreamUp
    		.Type = adTypeBinary
    		.Mode = adModeReadWrite
    		.Open
    		.Position = 0
    		.Write binFormData
    		.Position = i
    		Stream=.Read(j-i-1)
    		.Close
    	End With
    	// Public Function UpLoad(bolAutoName)
    	// 将上面的Stream写入到新建的一adodb stream,并保存到硬盘。
    	Dim objStreamFile
    	Set objStreamFile = Server.CreateObject("ADODB.Stream")
    	objStreamFile.Type = adTypeBinary
    	objStreamFile.Mode = adModeReadWrite
    	objStreamFile.Open
    	objStreamFile.Write Stream
    	objStreamFile.SaveToFile FileName,adSaveCreateOverWrite
    	objStreamFile.Close
    

    我修改了Z-Blog部分代码,以更好的嵌入到我的小巷子赶猪似的面向过程式网页结果中,代码如下:

    	Dim objStreamUp
    	Set objStreamUp = Server.CreateObject("ADODB.Stream")
    	With objStreamUp
    		.Type = 1
    		.Mode = 3
    		.Open
    		.Position = 0
    		.Write binFormData
    		.Position = i
    		Stream=.Read(j-i-1)
    		.Position = 0
    		.SetEos
    		.Write Stream
    		.SaveToFile FileName,2
    		.Close
    	End With
    

    代码只使用了一个adodb stream,获取到文件Stream后,重置adodb stream,将其写入,然后保存文件。

  5. 相关文章
  6. Color Table
    UTF-8无组件上传代码实例 - 开源
    网页制作常见问题
    开源的asp音乐视听网站源码

  7. 评论本文:
  8. EMail: