首页新闻找找看学习计划

asp.net mvc大文件上传、断点续传功能。求大神指点。

0
悬赏园豆:10 [已解决问题] 解决于 2014-12-31 14:40

在项目中需要用到断点续传功能,但是网上关于断点续传的案列不多,本人愚昧到现在没还明白。在51CTO上也看到了一篇关于MVC大文件上传,将文件缓存到磁盘的代码,文章中也有说支持断点续传,但是没有做详细说明,自己看代码页看的稀里糊涂的,不知道从哪下手改。文章地址:在ASP.NET MVC中实现大文件异步上传(2)

如果有好的案列,请分享给我,非常感谢。

罗志强的主页 罗志强 | 初学一级 | 园豆:154
提问于:2013-10-07 10:39
< >
分享
最佳答案
0

那篇文章只写了服务器端的代码,没有客户端的代码,主要是用 HttpWorkerRequest 处理大文件的上传。

B/S 系统要做断点续传有很多限制,主要是浏览器默认的安全设置太高,不能访问到客户端文件的全路径,解决的办法是用 html5 或者 flash、silverlight 提高安全信任。

收获园豆:10
geass.. | 小虾三级 |园豆:1728 | 2013-10-07 14:09

客户端我用的是swfUpload插件,关键是服务器端怎么去做断点续传呢。而上面那篇文章做的是重新将文件覆盖然后在写入。而不是接着已有的去写入

罗志强 | 园豆:154 (初学一级) | 2013-10-07 14:33

@ShowStyle: 如果要实现迅雷那种效果,需要自己开发组件。

抛开技术层面来说,只要知道这次上传了多少字节,下次就可以跳过这些字节继续上传。
用 FileInfo 类实现的话,就是用 Stream.Position 属性来获取文件里字节流的位置。
断网后自动再上传这个就是 重新 实例化 上传类,通过 Stream.Position 属性设置 字节流 的开始位置,再上传。

建议拿网上开源组件 http://silverlightfileupld.codeplex.com/

geass.. | 园豆:1728 (小虾三级) | 2013-10-07 19:43

@geass..: 现在已经有些门道了,

ReadEntityBody( Byte[] , Int32, Int32) 使用指定的要从中读取数据的缓冲区、字节偏移量和最大字节数从客户端读取请求数据(当未预先加载时)。

通过HttpworkerRequest类中的这个方法来读取数据,字节偏移量是不是就是可以从指定的位置开始读取。对吧,但是本地文件我只能获取到文件的大小,却不能获取当前末尾的位置。

罗志强 | 园豆:154 (初学一级) | 2013-10-07 19:48

@ShowStyle: swfUpload组件 当上传文件的进度达到100%时,才去调用服务器的方法写入文件,并不是分块上传,所以这次没有传完的文件等到下次又要从头上传。而且它也没有权限自动加载客户端的文件,因为得不到全路径。

geass.. | 园豆:1728 (小虾三级) | 2013-10-07 20:13
其他回答(2)
0

或许可以实现,但太复杂。针对大型文件,非常难办,数据校验不好做。你没发现很多网站都是activeX吗,不行了就用这个吧?flash插件或许也有这个可能。

沧海一杰 | 园豆:28 (初学一级) | 2013-10-07 17:33
0
荆门泽优软件有限公司 | 园豆:255 (菜鸟二级) | 2019-09-20 11:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册