中国开发网: 论坛: 程序员情感CBD: 贴子 118952
有狐
【技术贴】昨天做了个HTTP文件上传组件,有问题问问
能用,但想搞得更好些,其实就是效率问题
网上有人称做了一个效率奇高,几百M的文件很快搞定,而且占CPU低
我的这个好像几M的也得几秒,而且占CPU,不爽

以下是一个典型的Form提交以后的例子
每个值域都以一个提交时由浏览器自动生成的字符串分隔
在这个例子里是“-----------------------------7d53c22af05e8”
分隔串#13#10之后就是“Content-Disposition: form-data;”部分,
我也不清楚什么情况会不同,就当肯定一样的
name部分就是每个值域的名字
如果值域是文件,那么还有filename和Content-Type部分
表示在客户端机器上的文件路径和文件名,以及文件的类型
每一段的剩下部分两个"#13#10"就是值域的具体内容
如果是文件,则内容就可能是二进制的数据
每个值域的具体内容#13#10之后就是另一段了

这些内容在ASP里通过Request.BinaryRead(Request.TotalBytes)得到
用VBScript变体变量存储给Delphi后,OleVariant的真实类型为
varByte+varArray ($2011)

我现在是转化为String,然后用PChar去处理
从第一段分隔串开始,根据规则Inc PChar指针,
到获取值域内容时,先用PosEx获取下一个分隔串位置,
然后通过位置之差获得当前值域的内容
然后继续处理下一段,直到结束

我想问问,有没有更快的法子?
我想应该可以不用转化为String,直接操作Byte Array吧?
谁对Byte Array操作熟,指点一下
我估计用PosEx耗时最多,不直到有没有更好的办法确定
下一段的位置
或者有没有整体上就不同的另外的更好的办法?

-----------------------------7d53c22af05e8
Content-Disposition: form-data; name="Title"

标题文本
-----------------------------7d53c22af05e8
Content-Disposition: form-data; name="Content"

内容文本
-----------------------------7d53c22af05e8
Content-Disposition: form-data; name="File"; filename="D:\Test.txt"
Content-Type: text/plain

这里是附件内容,可能是很大很大的二进制乱码内容
-----------------------------7d53c22af05e8
Content-Disposition: form-data; name="Submit"

确定
-----------------------------7d53c22af05e8--

相关信息:


欢迎光临本社区,您还没有登录,不能发贴子。请在 这里登录