Web支持可暂停的超大文件上传
代码镇顶:https://github.com/dna2github/petalJS/blob/master/upload
前些天遇到用户须要上传10GB大小以上的文件的需求,查查网上的库。都不好用。都没有一个完整的前后端的样例,要么像resumable.js仅仅有前端,后端写得无比麻烦。要么是jquery file uploader封装得太完整。想改就非常麻烦。
懒人就自己写个小而易懂大家都能够用的东西吧。
代码支持IE 10+, Opera, Chrome, Firefox, Safari, 在Android 4.2以上的默认浏览器貌似都能顺利执行。
js代码也就80行左右。错误处理留空。
代码下载后, python manage.py runserver,然后浏览器里输入 http://127.0.0.1:8000/static/index.html就能够使用了。
代码js部分就是使用HTML5的Blob将文件分片,然后逐个POST。
为了保证传输效率,就是让整个POST请求除了HTML的Header外。都用binary形式上传。假设再配合新的API,比方后端写一个open file的API(e.g. /open)。返回一个hash。然后用hash作为URL,上传文件data的时候(e.g. /upload/:hash)就往指定文件中写数据就好了,最后使用完调用close file的API(e.g. /close/:hash)。測试了下,在单机状态下,传了2.6GB的文件用了77秒,大概30MB/s。几乎相同是硬盘的读写速度了吧。
想要实现暂停和恢复,在event_reader_loadend里使用个flag就能够了。暂停的时候设置flag为true,在上传blob成功的时候假设flag为true就跳出停止。当按恢复的时候,继续从暂停的地方按文件偏移读取文件blob。
想要达到更好的传输速度,就在uploadFile里的step上下文章就好了。通过统计没传一个blob所用的时间,动态调整step的大小。就是文件blob的大小。
要是遇到服务器错误或者用户不小心刷新了页面,就是另外的case了,这里就是简单说一下。使用file_name, file_size和file_md5是能够在即使页面刷新的情况下继续上传文件。
支持断点下载也是外话。读下Content-Range实现下206返回就好了。Enjoy :D
Web支持可暂停的超大文件上传的更多相关文章
- web超大文件上传
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- 【Java Web开发学习】Spring MVC文件上传
[Java Web开发学习]Spring MVC文件上传 转载:https://www.cnblogs.com/yangchongxing/p/9290489.html 文件上传有两种实现方式,都比较 ...
- 4GB以上超大文件上传和断点续传服务器的实现
随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求. 但是在很多情况下,平台运营方并没有大文件上传和断点续传的开发经验,往往在网上找一些简单的 ...
- Java超大文件上传解决办法
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...
- Spring 4 官方文档学习(十一)Web MVC 框架之multipart(文件上传)支持
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multipart 1.简 ...
- java+web+超大文件上传
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
- php+超大文件上传
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- 怎么实现超大文件上传 2-3GB
1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...
- PHP超大文件上传与下载
前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...
随机推荐
- scripts
Shell Script:================================================================ 示例1:[root@server0 ~]# ...
- 【LeetCode】Longest Substring Without Repeating Characters(无重复字符的最长子串)
这道题是LeetCode里的第3道题. 题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: ...
- Leetcode 599.两个列表的最小索引总和
两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...
- [oldboy-django][5python基础][内置函数]zip
python3中,把两个或两个以上的迭代器封装成生成器,在循环遍历生成器中,不断产生元组. 如果提供的迭代器长度不对等,生成器的长度为最短迭代器的长度. # coding= utf-8 # zip 多 ...
- 【转】tomcat与apache,tomcat与servlet的区别
tomcat与apache的区别:(转自:http://blog.csdn.net/longzs/article/details/10959945) 1.apache支持静态页,tomcat支持动态的 ...
- Android之Bitmap 高效加载
一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数 图片格式(Bitmap.Config) 一张100*100的图片占用内存的大小 ALPHA_8 图片长度*图片宽度 100 ...
- Linux中date命令的各种实用方法
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://521cto.blog.51cto.com/950229/935642 在linu ...
- poj2002 hash+邻接表优化Squares
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 17487 Accepted: 6643 Descript ...
- 12c可插拔数据库CDB与PDB管理总结
12c可插拔数据库CDB与PDB管理总结 创建pdb1.直接创建 CREATE PLUGGABLE DATABASE pdb2 ADMIN USER boswll IDENTIFIED BY orac ...
- 【bzoj4668】冷战 并查集按秩合并+朴素LCA
题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...