关于asp文件上传问题请教高手。
我们现在用的无组件上传,都是把文件写入到流里面,最后再将流写入到文件,但是我觉得小文件还可以,如果文件上了几百M,就会提示内存不足。后面研究了一下FTP工具,FTP是分段...
我们现在用的无组件上传,都是把文件写入到流里面,最后再将流写入到文件,但是我觉得小文件还可以,如果文件上了几百M,就会提示内存不足。
后面研究了一下FTP工具,FTP是分段上传的,就是获取一点文件,就直接写入生成文件,这样就不用写入到流里面了。
请问如果是asp实现这种效果的话。可不可以把文件分段以二进制读取后,马上写入到文件保存,那么每获取一段数据就追加到文件里面。具体要怎么实现?
我把无惧上传改了一下,
无惧是一次性写入到流里面:
oUpFileStream.Write Request.BinaryRead (RequestSize)
而我是分段读
ReadBytes = 0
while ReadBytes < TotalBytes
CurrReadBytes = ReadSizeRang
if CurrReadBytes + ReadBytes > TotalBytes then CurrReadBytes = TotalBytes - ReadBytes
DataRead = Request.BinaryRead(CurrReadBytes)
oUpFileStream.Write(DataRead) '分段写入
'执行写入到文件操作
----(代码)利用Adodb.Stream把读取到的写入到缓存文件-----------
'结束
ReadBytes= ReadBytes + CurrReadBytes
wend
请问我么做做是否可行?会不会影响上传速度或服务器性能?还有就是利用Stream流写入文件有没有类似FSO的ForAppending模式,这样就不重复生成文件/ 展开
后面研究了一下FTP工具,FTP是分段上传的,就是获取一点文件,就直接写入生成文件,这样就不用写入到流里面了。
请问如果是asp实现这种效果的话。可不可以把文件分段以二进制读取后,马上写入到文件保存,那么每获取一段数据就追加到文件里面。具体要怎么实现?
我把无惧上传改了一下,
无惧是一次性写入到流里面:
oUpFileStream.Write Request.BinaryRead (RequestSize)
而我是分段读
ReadBytes = 0
while ReadBytes < TotalBytes
CurrReadBytes = ReadSizeRang
if CurrReadBytes + ReadBytes > TotalBytes then CurrReadBytes = TotalBytes - ReadBytes
DataRead = Request.BinaryRead(CurrReadBytes)
oUpFileStream.Write(DataRead) '分段写入
'执行写入到文件操作
----(代码)利用Adodb.Stream把读取到的写入到缓存文件-----------
'结束
ReadBytes= ReadBytes + CurrReadBytes
wend
请问我么做做是否可行?会不会影响上传速度或服务器性能?还有就是利用Stream流写入文件有没有类似FSO的ForAppending模式,这样就不重复生成文件/ 展开
4个回答
展开全部
1.asp只支持部分文件流操作,比如:一般说法是文件流只能读取完了才能去操作(ado.stream组件)它。这样你就不能去完全控制它,asp本身就是不参与内存管理的一种脚本。这方面弱。
2.上面如果成立,就有这样个思路,建立一个数据流对象,然后建立多个目标数据流对象,每个目标流对象读取设定大小数据后,写入文件。
3,相关属性、方法支持参考
a. position 数据流位置,表示数据操作从这里开始,(第一个位置的值为 0,不是 1,简单例子:str.position=count-lenb(result)-2 'position指出文件的开始位置 )
b。 SaveToFile 将 Stream 对象数据保存为文件,第二个参数:1-不允许覆盖,2-覆盖写入 (例子:desc.SaveToFile fullpath,2 '以fullpath指定的路径及名称保存文件 )
c。CopyTo(destStream, count) 将 Stream 对象的指定数据拷贝到 destStream
(例子:str.copyto desc, lenb(filecotent) 'lenb(filecontent)表示文件的长度 )
4.关于ForAppending模式,你可试一下上面提供的SaveToFile的option参数,是否支持
5.我觉得性能什么的影响不大,只要分块合适
6.可以这样探讨,去实践,但如果不是服务器有这样的限制,应该采取组件去实现,2个g的上传也没问题
2.上面如果成立,就有这样个思路,建立一个数据流对象,然后建立多个目标数据流对象,每个目标流对象读取设定大小数据后,写入文件。
3,相关属性、方法支持参考
a. position 数据流位置,表示数据操作从这里开始,(第一个位置的值为 0,不是 1,简单例子:str.position=count-lenb(result)-2 'position指出文件的开始位置 )
b。 SaveToFile 将 Stream 对象数据保存为文件,第二个参数:1-不允许覆盖,2-覆盖写入 (例子:desc.SaveToFile fullpath,2 '以fullpath指定的路径及名称保存文件 )
c。CopyTo(destStream, count) 将 Stream 对象的指定数据拷贝到 destStream
(例子:str.copyto desc, lenb(filecotent) 'lenb(filecontent)表示文件的长度 )
4.关于ForAppending模式,你可试一下上面提供的SaveToFile的option参数,是否支持
5.我觉得性能什么的影响不大,只要分块合适
6.可以这样探讨,去实践,但如果不是服务器有这样的限制,应该采取组件去实现,2个g的上传也没问题
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1,文件上传之前本地用javascript处理成分段字节流。
2,服务器端用asp接收分段上传的字节流,存入数据库。
3,服务器端读取数据库中的文件流,合并,然后服务器端生成文件。
思路已给,大文件上传测试效果完美。
2,服务器端用asp接收分段上传的字节流,存入数据库。
3,服务器端读取数据库中的文件流,合并,然后服务器端生成文件。
思路已给,大文件上传测试效果完美。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议最好还是用组件来做。别的不多说了,很多大的网站都是这样做的。可见用组件还是是快最安全的。如果不会开发就到网上去下一个组件,如果会开发,就自己开发一个这个不难。无组件可以做得到,但会出现很多问题。文件的完整性,安全性,上传速度都远远不能跟组件比。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
网上很多成熟的asp上传 ,比如,无惧上传类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询