在项目中需要用到断点续传功能,但是网上关于断点续传的案列不多,本人愚昧到现在没还明白。在51CTO上也看到了一篇关于MVC大文件上传,将文件缓存到磁盘的代码,文章中也有说支持断点续传,但是没有做详细说明,自己看代码页看的稀里糊涂的,不知道从哪下手改。文章地址:在ASP.NET MVC中实现大文件异步上传(2)
如果有好的案列,请分享给我,非常感谢。
那篇文章只写了服务器端的代码,没有客户端的代码,主要是用 HttpWorkerRequest 处理大文件的上传。
B/S 系统要做断点续传有很多限制,主要是浏览器默认的安全设置太高,不能访问到客户端文件的全路径,解决的办法是用 html5 或者 flash、silverlight 提高安全信任。
客户端我用的是swfUpload插件,关键是服务器端怎么去做断点续传呢。而上面那篇文章做的是重新将文件覆盖然后在写入。而不是接着已有的去写入
@ShowStyle: 如果要实现迅雷那种效果,需要自己开发组件。
抛开技术层面来说,只要知道这次上传了多少字节,下次就可以跳过这些字节继续上传。
用 FileInfo 类实现的话,就是用 Stream.Position 属性来获取文件里字节流的位置。
断网后自动再上传这个就是 重新 实例化 上传类,通过 Stream.Position 属性设置 字节流 的开始位置,再上传。
建议拿网上开源组件 http://silverlightfileupld.codeplex.com/
@geass..: 现在已经有些门道了,
ReadEntityBody( Byte[] , Int32, Int32) | 使用指定的要从中读取数据的缓冲区、字节偏移量和最大字节数从客户端读取请求数据(当未预先加载时)。 |
通过HttpworkerRequest类中的这个方法来读取数据,字节偏移量是不是就是可以从指定的位置开始读取。对吧,但是本地文件我只能获取到文件的大小,却不能获取当前末尾的位置。
@ShowStyle: swfUpload组件 当上传文件的进度达到100%时,才去调用服务器的方法写入文件,并不是分块上传,所以这次没有传完的文件等到下次又要从头上传。而且它也没有权限自动加载客户端的文件,因为得不到全路径。
或许可以实现,但太复杂。针对大型文件,非常难办,数据校验不好做。你没发现很多网站都是activeX吗,不行了就用这个吧?flash插件或许也有这个可能。