github https://github.com/fex-team/webuploader/
http://fex.baidu.com/webuploader/

文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块

  • 分片,并发上传
  • 预览,压缩
  • html5

image.png

断点上传 http://blog.ncmem.com/wordpress/2019/08/12/java-http%E5%A4%A7%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0%E4%B8%8A%E4%BC%A0/

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(需要开启)等信息
  • 服务端在接收这些信息后便可以非常方便的进行处理了。比如将块数据保存到分布式存储系统中

服务端的逻辑

服务端的业务逻辑

  • 分成初始化
  • 块处理
  • 文件上传完毕

需要前后端密切联系才能做好,

  • 前端需要根据固定大小对文件进行分片,并且请求中要带上分片序号和大小
  • 前端发送请求顺利到达后台后,
  • 服务器只需要按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件即可