| Home » Article » Z-Blog是如何上传文件的 |
| | 当更新时自动发送邮件通知。 | |||
| | 有什么建议或评论,可以贴一下。 | |||
| | 你的支持,让我们做的更好。 | |||
当asp以UTF8编码时,上传表达中上传文件的路径名也是以UTF8编码的。而且在enctype="multipart/form-data"方式下,上传处理页面必须使用Request.BinaryRead方式来进行后续操作。但由于微软的Request只要调用了BinaryRead就不能使用Request.Form(反之亦然),这给无组件文件上传带来很多麻烦。下面是最近看Z-Blog源码后的一些笔记。
表单代码在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)
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,将其写入,然后保存文件。
Color Table
UTF-8无组件上传代码实例 - 开源
网页制作常见问题
开源的asp音乐视听网站源码
| Copyright © 2009 xuyibo.org All right reserved. |