大文件上传浅谈,以及遇到的问题

原创 2004年08月28日 03:29:00

最近做在做一个项目,涉及到文件上传的问题。 以前也做过文件上传。但都是些小文件,不超过2M。 这次要求上传1G以上的东西。 没办法找来资料研究了一下。 基于WEB的文件上传可以使用FTP和HTTP两种协议,用FTP的话虽然传输稳定,但安全性是个严重的问题,所以没有考虑。 剩下只有HTTP。 在HTTP中有3种方式,PUT、WEBDAV、RFC1867,前2种方法不适合大文件上传,在这里也不说了。

确定使用RFC1867格式处理之后开始分析流行的上传组件。看了N多代码之后发现,目前无组件程序和一些COM组件都是使用Request.BinaryRead方法。一次性得到上传的数据,然后分析处理。这就是为什么上传大文件很慢的原因了,IIS超时不说,就算1G文件上去了,分析处理也得一阵子。 之后我把注意力放在国外商业组件上,比较流行的有Power-Web,AspUpload,ActiveFile,ABCUpload,aspSmartUpload,SA-FileUp。其中比较优秀的是ASPUPLOAD和SA-FILE,他们号称可以处理2G的文件(SA-FILE EE版甚至没有文件大小的限制),而且效率也是非常棒,难道编程语言的效率差这么多?(我的编程环境是VB6)  查了一些资料,觉得他们都是直接操作文件流。这样就不受文件大小的制约。 真是个好方法。

但老外的东西也不是绝对完美,ASPUPLOAD处理大文件后,内存占用情况惊人。1G左右都是稀松平常。我用的是3.0.0.3版。至于SA-FILE虽然是好东西但是破解难寻(郁闷死..) 失望之际,发现2款上传组件,Lion.Web.UpLoadModule和AspnetUpload,都是.NET的,估计也是操作文件流。但是上传速度和CPU占用率都不如老外的商业组件。

做了个测试,LAN内传1G的文件。ASPUPLOAD上传速度平均是4.4M/s,CPU占用10-15,内存占用700M。SA-FILE也差不多这样。而AspnetUpload最快也只有1.5M/s,平均是700K/s,CPU占用15-39,测试环境:PIII800,256M内存,100M LAN。我想AspnetUpload速度慢是可能因为一边接收文件,一边写硬盘。资源占用低的代价就是降低传输速度。 但也不得不佩服老外的程序,CPU占用如此之低.....这样2个.net的组件也被PASS.

稍带2个问题就是上传进度和断点续传。
显示上传进度比较简单,主要是查询用户上传的状态,用Script显示到浏览器中,至于无刷新显示就要看脚本语言运用的熟练程度了。
断点续传,HTTP方式是实现不了的,因为浏览器每次上传文件都是从头开始,没有Range标签。实现的方法只能用ActiveX。


研究之后决定写个CGI来处理文件上传。 这样可以不走IIS以免程序出错影响网站访问。小弟比较菜只能用VB6做,完成之后发现WIN CGI的效率简直就是差的不能再差。索性写个FILE SERVER,专门处理文件的上传。但是现在遇到一个2个问题。

一、用WINSOCK控件接收到的文本有乱码 不知道是程序转换时的错误还是WINSOCK本身垃圾,SO 换了PowerTCP的WINSOCK TOOL,情况有所好转 乱码没那么多了.........准备换vb.net,直接操作socket,程序还没做,不知道用.net接收会不会乱码。再有就哭了。

二、这个问题就比较初级了....接收到的文件流不能还原成文件..寒一个,


最后就是如何高效处理文件流, 我想来想去也就只有2种方法,一是都放在内存里,然后一起处理, 二是一边接收一边写文件。 但这2种方法都不尽如人意思

 

 


 

php大文件上传时,应该注意的问题

/* 大文件上传时,应该注意的问题*/1.时间限制 如果使用php程序进行文件上传,如果文件上传需要的时间过多,会停止运行程序. 但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该...
  • u012408083
  • u012408083
  • 2016年04月26日 12:25
  • 1186

IIS中的大文件上传问题解决方法

IIS出于安全考虑限制了大文件的上传,而网上百度到的大部分解决方法都是用一个管理员权限的记事本打开一个文件修改参数,但是我发现里面根本没有网上所说的那些参数,最后自己找到了修改发布文件的webconf...
  • u012874738
  • u012874738
  • 2013年12月19日 10:08
  • 3331

简易的springMVC上传大文件

jsp: java @RequestMapping(value = "login/upload", method = RequestMethod.POST) public...
  • u014596302
  • u014596302
  • 2016年07月10日 19:04
  • 1129

PHP+JS+HTML5+Flash网页上传超大文件的解决方案

所有Web程序猿都有过通过网页上传文件到服务器的经历,上传小文件是十分简单的。当你上传的文件大小逐渐变大的时候,就会遇到第一个问题: 1.PHP上传文件的大小是有限制的,默认是2M,即使你改...
  • yxl8359026
  • yxl8359026
  • 2015年11月18日 23:44
  • 5428

IIS7.5上传大文件

服务器用的是window server2008r2,用ueditor怎么也不能上传大文件,ueditor也修改了php也修改了,就是不行,最后还是修改iis设置生效了,以下是收集的修改方法。 我只用...
  • dwz0121
  • dwz0121
  • 2016年04月11日 09:45
  • 504

在Git上提交代码时遇到的问题

当我们改好一段代码时,准备将本地的master提交到远程库的master时,突然发现不能提交了,出现的错误代码如下: 解决办法: 现在我来简单分析一下我是在什么情况下遇到的这种错误: 我在修改完一段代...
  • No_red
  • No_red
  • 2016年05月21日 14:18
  • 447

Java实现浏览器端大文件分片上传

Breakpoint-http,是不是觉得这个名字有点low,break point断点。这是一个大文件上传的一种实现。因为本来很久没写过前端了,本来想自己好好写一番js,可惜因为种种原因而作罢了。该...
  • u014150463
  • u014150463
  • 2017年07月01日 11:29
  • 4106

thinkphp框架中的(大)文件上传

最近在学习PHP,首次用其实现文件上传,特此记录
  • xue251248603
  • xue251248603
  • 2014年08月07日 09:58
  • 1181

C# 大文件分段上传,下载

1》客户端 分段上传方法 public static readonly int G_BLOCK_LEN_PER = 2 * 1024 * 1024; private vo...
  • u010279498
  • u010279498
  • 2017年03月07日 16:25
  • 2059

使用webuploader上传大文件

1.Ftp上传,2.webuploader上传
  • xingfuzhijianxia
  • xingfuzhijianxia
  • 2017年04月20日 13:40
  • 3083
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大文件上传浅谈,以及遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)