github https://github.com/fex-team/webuploader/
http://fex.baidu.com/webuploader/
文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块
- 分片,并发上传
- 预览,压缩
- html5
https://zhuanlan.zhihu.com/p/132630206
https://www.cnblogs.com/sghy/p/9143955.html
https://www.cnblogs.com/songsu/p/11751955.html
https://blog.csdn.net/aryasei/article/details/90771646
https://www.cnblogs.com/songsu/p/12195108.html
分片上传核心点
- 如何分片,用 WebUploader来实现
- 如何合成一个文件;
- 中断了从哪个分片开始
如何合并
在合之前,还得先解决一个问题,如何区分分块所属那个文件的。刚开始的时候,我是采用了前端生成了唯一uuid来做文件的标志,在每个分片请求上带上。不过后来在做秒传的时候我放弃了,采用了Md5来维护分块和文件关系
在服务端合并文件,和记录分块的问题,在这方面其实行业已经给了很好的解决方案了。参考迅雷
- 每次下载中的时候,都会有两个文件,一个文件主体,
- 另外一个就是文件临时文件,临时文件存储着每个分块对应字节位的状态
分块上传
分块上传可以说是我们整个项目的基础,像断点续传、暂停这些都是需要用到分块
每个分块数据的标识
- 文件块的索引,大小,偏移,
- 文件MD5,文件块MD5(需要开启)等信息
- 服务端在接收这些信息后便可以非常方便的进行处理了。比如将块数据保存到分布式存储系统中
服务端的逻辑
服务端的业务逻辑
- 分成初始化
- 块处理
- 文件上传完毕
需要前后端密切联系才能做好,
- 前端需要根据固定大小对文件进行分片,并且请求中要带上分片序号和大小
- 前端发送请求顺利到达后台后,
- 服务器只需要按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件即可