28,391
社区成员
发帖
与我相关
我的任务
分享
<form id="form" action="upload.asp" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input type="submit" value="upload" />
</form>
Dim biData, PostData
Size = Request.TotalBytes
biData = Request.BinaryRead(Size)
PostData = BinaryToString(biData,Size)
Response.Write "<pre>" & PostData & "</pre>" '使用pre,原样输出格式
Function BinaryToString(biData,Size)
Const adLongVarChar = 201
Set RS = createObject("ADODB.Recordset")
RS.Fields.Append "mBinary", adLongVarChar, Size
RS.Open
RS.AddNew
RS("mBinary").AppendChunk(biData)
RS.update
BinaryToString = RS("mBinary").Value
RS.Close
End Function
-----------------------------7e1f3261510f6
Content-Disposition: form-data; name="file"; filename="C:\Users\User\Desktop\2012鑸圭エ.txt"
Content-Type: text/plain
2012船票
-----------------------------7e1f3261510f6--
Set oSourceData = CreateObject("ADODB.Stream")
oSourceData.Write request.BinaryRead(nPartBytes)
出现了overflow错误。Const adTypeBinary = 1
Const adTypeText = 2
Const adModeReadWrite = 3
Function BytesToString(bytes, charset)
With CreateObject("ADODB.Stream")
.Mode = adModeReadWrite
.Type = adTypeBinary
.Open
.Write bytes
.Position = 0
.Type = adTypeText
.Charset = charset
BytesToString = .ReadText
End With
End Function
response.write BytesToString(biData,"utf-8")
因为开发的项目考虑商用,所以就不太能用第三方的商业组件。H5的客户端还没有去了解,前面看了UploadiFive也是要收费的。
感谢!
Dim Bytes
Bytes = Request.BinaryRead(Request.TotalBytes)
Call SaveBytes("upload.txt",Bytes)
Function SaveBytes(file,ByRef Content)
With Server.CreateObject("Adodb.Stream")
.Type = 1
.Open
.Write Content
.SaveToFile Server.MapPath(file) , 2
.Close
End With
End Function
为什么暂时不用管上传file的编码,因为上传的文件有可能是UTF-8编码,有可能是gbk或其它编码。文件上传组件都是将上传的内容 二进制保存,不存在编码问题。
现在有了 这个 upload.txt 文件,你可以试着用不同的编码打开。看看filename不乱码时 是不是你页面的编码!
好了,现在大概知道原理了。现在我简述一下如何获取文件名。
1. 从header 中获取分断的 boundary ,然后根据 boundary 和 2个换行回车符 用 instrb函数 从 Bytes 获取到
Content-Disposition: form-data; name="file"; filename="C:\Users\User\Desktop\2012鑸圭エ.txt"
Content-Type: text/plain
2. 上面获取到的是二进制形式,再转成当前编码的字符串就可以了。
上传代码稍有点复杂,几句话肯定说不清。关于大文件上传,给楼主几个建议吧。
1. 用成熟的组件算了,如aspupload。当然有研究精神,可以继续深入。
2. 现在H5客户端都很厉害,大文件可以支持分断、分块上传。如500M的文件,可以分成50个上传,服务端再合并就好了。干嘛不用别人写好的类库直接提取文件内容保存到硬盘? 编码都统一了吗?你用gb还是utf-8 Web开发学习资料推荐 asp json类库解析json字符串
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Session.CodePage = 65001
Response.Charset = "UTF-8"
%>
还是没有用。之所以想知道原因一是这个错误很直接,重现很容易,想知道原因。另外主要是将上传功能做到vb6生成dll来保存上传文件,现在主体都实现了,就是中文文件名会乱码,所以来请教各位。
搜索后,这个问题在以下文章也被提及过,不过只贴出了整段解决问题后的代码,不知道具体是哪个环节的问题。。
upload_5xsoft.inc中文乱码的解决方法代码文件名不会乱码,文件是utf-8存储的,也不会乱码。
[quote=引用 1 楼 showbo 的回复:] 干嘛不用别人写好的类库直接提取文件内容保存到硬盘? 编码都统一了吗?你用gb还是utf-8 Web开发学习资料推荐 asp json类库解析json字符串
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Session.CodePage = 65001
Response.Charset = "UTF-8"
%>
还是没有用。之所以想知道原因一是这个错误很直接,重现很容易,想知道原因。另外主要是将上传功能做到vb6生成dll来保存上传文件,现在主体都实现了,就是中文文件名会乱码,所以来请教各位。
搜索后,这个问题在以下文章也被提及过,不过只贴出了整段解决问题后的代码,不知道具体是哪个环节的问题。。
upload_5xsoft.inc中文乱码的解决方法[/quote]
utf-8你的所有asp文件存储编码也需要存储为utf-8编码才行
并且你是直接输出txt 二进制,txt如果是ansi编码,非utf-8内容是会乱码的,文件名不会乱码,内容编码和meta指定的编码不一致。
2进制保存到文件和内容直接输出也还和文件存储编码有关,所以最好是文件名归文件名,内容另外保存到硬盘,而不是全部保存
下面代码文件名不会乱码,文件是utf-8存储的,也不会乱码。如果是其他存储编码如ansi,内容会乱码
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
Session.CodePage = 65001
Response.Charset = "UTF-8"
if request.QueryString("op")="upload" then
Size = Request.TotalBytes
biData = Request.BinaryRead(Size)
Response.BinaryWrite bidata
response.End
end if
%>
<form id="form" action="?op=upload" method="post" enctype="multipart/form-data">
<input name="file" type="file" />
<input type="submit" value="upload" />
</form>