- Z-Blog是如何上传文件的
- 代码片段
- 相关文章
- 评论本文:
Z-Blog是如何上传文件的
From: xuyibo.org Updated: 2021-07-10当更新时自动发送邮件通知。 | |
有什么建议或评论,可以贴一下。 | |
你的支持,让我们做的更好。 | |
当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音乐视听网站源码