Asp.net mvc 大文件上传 断点续传 进度条

 

概述

项目中需要一个上传200M-500M的文件大小的功能,需要断点续传、上传性能稳定、突破asp.net上传限制。一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http://developer.51cto.com/art/201002/183218_1.htm,但是很遗憾的是由于我技术不精湛,无法修改成能够支持断点续传。然后在网上找了很多资料,但是都无法满足我的功能,有些说要ftp,有些说要是Silverlight,都有很多说辞,我也试过很多方法,下载过很多代码,但那都不是我想要的。我想要的是一个简单,功能又齐全的大文件上传功能。

  1. 只想用http协议,不想走FTP协议
  2. 只想上传大文件,不想受ASP.NET 2G大小限制
  3. 不想购买一些付费的上传组件
  4. 上传过程中能够删除文件
  5. 上传过程中能够显示进度条
  6. 上传过程中能够暂停上传
  7. 上传过程中出现异常,能够接着上传(断点续传)

如果你想满足上述功能,或者想扩展更多功能。你就往下看

在网上找案例、方法期间在一篇文章中给了我很大的启发。

  1. http://open.dbank.com/wiki/index.php?title=%E6%95%B0%E6%8D%AE%E4%B8%8A%E4%BC%A0 里面的Range属性。
  2. http://www.cnblogs.com/ASPNET2008/p/3360427.html 里面的分块上传,虽然作者也写了断点续传代码,但是通过我的测试与研究发现,他的代码并没有真正意义上的断点续传,他只是将已经上传的那部分文件流舍弃掉,然后等上传到了那块位置的时候才开始附加到磁盘文件,这样并没有提高上传效率,我的代码就是在他的代码上稍作修改的结果

最终效果图

大文件上传

大文件上传我也不想多说。本文及案例重点是断点续传。大文件上传有很多上传案例,而且都非常不错,也非常成熟。可以google一大把。

断点续传

   此方法经测试压缩文件似乎会出现问题

在提前研究这功能期间,一直都有一个思路就是:假如我上传了100M,突然有断网等异常情况,那我下次上传就应该从磁盘文件的最后位置开始上传。

上述思路应该是没有问题的,可是在解决这个问题的时候总是困难重重,服务器端不能直接读取客户端文件,也不能直接要求客户端从什么位置开始读。

然后知道Jquery里面有一款插件叫Jquery File Upload,也就是上面写断点续传哥们用到的插件,它能够对文件进行分块上传,也就是说每次上传只是上传文件的一部分,就像我们.Net操作文件流一样,读取文件的一部分字节。

首先看Jquery File Upload分块后正常情况的报文

请求时发送一个字节区间。我就在响应报文头里面加了一个Range属性,告诉Jquery File upload我当前处理的位置是多少。虽然我到目前都没明白Jquery File Upload是怎么实现的,但是我这样做确实能够让它下次上传同一个文件时它会帮我处理。

Code

由于个人原因,也无法描述的更加好,把源代码贴上供大家下载,希望能够有更好的解决方案出现,也希望能够给大家一点启发与帮助。谢谢

 
 
分类: .Net, Asp.Net, JQuery

Asp.net mvc 大文件上传 断点续传的更多相关文章

  1. Asp.net mvc 大文件上传 断点续传 进度条

    概述 项目中需要一个上传200M-500M的文件大小的功能,需要断点续传.上传性能稳定.突破asp.net上传限制.一开始看到51CTO上的这篇文章,此方法确实很不错,能够稳定的上传大文件,http: ...

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

    文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...

  3. MVC图片上传、浏览、删除 ASP.NET MVC之文件上传【一】(八) ASP.NET MVC 图片上传到服务器

    MVC图片上传.浏览.删除   1.存储配置信息 在web.config中,添加配置信息节点 <appSettings> <add key="UploadPath" ...

  4. ASP.NET对大文件上传的解决方案

    在ASP.NET 开发的过程中,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的做到多线程的操控和上传进度的显示.笔者在此给大家推荐一款简单易用的上传组件,从而快速便捷得解决了 ...

  5. JS大文件上传断点续传解决方案

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

  6. Web大文件上传断点续传解决方案

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  7. java 大文件上传 断点续传 完整版实例 (Socket、IO流)

    ava两台服务器之间,大文件上传(续传),采用了Socket通信机制以及JavaIO流两个技术点,具体思路如下: 实现思路: 1.服:利用ServerSocket搭建服务器,开启相应端口,进行长连接操 ...

  8. asp.net实现大文件上传分片上传断点续传

    HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.a ...

  9. ASP.NET大文件上传断点续传解决方案

    HTML部分 <%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="index.aspx. ...

随机推荐

  1. Struts1——离BeanUtils看struts其原理1

    在Struts中非常典型的特点就是使用了ActionForm来搜集表单数据,可是搜集到的表单数据所有都是String类型的.假设我们直接拿来使用我们会面临一个非常麻烦的问题就是频繁的类型装换. Str ...

  2. <转>如何利用socket进行HTTP访问

    原文:<转>如何利用socket进行HTTP访问 如何利用socket进行HTTP访问 平常我们要访问某个URL一般都是通过浏览器进行:提交一个URL请求后,浏览器将请求发向目标服务器或者 ...

  3. ios基金会-XCode温馨提示

    (一个)代号规格pragma mark 1.定义 #pragma 开头的代码是一条编译器指令,是一个特定于程序或编译器的指令. 不一定适用于其他编译器或其他环境.假设编译器不能识别该指令.则会将其忽略 ...

  4. php rsa 加密、解密、签名、验签

    由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用. 以下php版本是适用于对接java接口,java适用密钥再p ...

  5. 【iOS】Xib的使用与File&#39;Owner总结

    一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...

  6. 完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

    准备工作:1.下载phpexcel1.7.6类包:2.解压至TP框架的ThinkPHP\Vendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图:       编写代码(以一个订单汇 ...

  7. 【淡墨Unity3D Shader计划】五 圣诞用品: Unity在Shader三种形式的控制&amp;混合操作编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/42060963 作者:毛星云(浅墨)  ...

  8. JS自动化测试 单元测试之Qunit

    前言 因为公司开发了一套javascript SDK需要测试,在网上找了很久,找到了JQuery团队开发的QUnit,和基于JUnit的JsUnit,还有一些还没有看,先讲讲QUnit吧 下载 登录J ...

  9. Python 3.3 try catch所有的错误Error,不包括Exception。关键在于 sys.exc_info()

    import os; import sys; #---------------------------------------------- def main( ) : try : a = 1 / 0 ...

  10. PHP 调用asp.net Web Services服务问题总结

    原文:PHP 调用asp.net Web Services服务问题总结 PHP是弱类型语言,转换非常不方便. < ?php //soap 客户端 $client=new SoapClient(' ...