大文件上传实现总结

Posted 非水非云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大文件上传实现总结相关的知识,希望对你有一定的参考价值。


大文件上传实现方式
  前端切片,分片上传,后端接收完切片后合并

 

判断切片上传完成
  a.每个切片都携带切片数量最大值,后端在接收到这个数量切片时合并
  b.前端判断上传完成后发送合并请求

 

后台合并切片
  a.切片携带顺序编号,后台按顺序号排列后合并
  b.切片携带size信息,后台可不按顺序合并,也可多线程合并

 

上传进度判断
  a.前端监听
  b.后端使用webSocket发送进度信息给前端

 

断点续传
  a.前端使用localstorage记录已上传的切片,缺陷是换了浏览器就不再有效

  b.后端保存已上传的切片的hash或md5(hash应该使用文件内容生成,不应使用文件名等易变的元素;文件过大,生成hash可能需要时间过程,可使用异步的方式),前端上传前从后台获取已上传的切片

 

文件秒传
  对比文件的hash,如果相同则返回上传成功

 

暂停上传
  暂停其实是取消整个切片的上传

 

恢复上传
  需要向后端请求已上传的切片信息,跳过这些切片

 

切片上传失败的处理
  hash或md5验证失败,不一致重传
  根据切片数判断切片缺失

 

前端切片原因
  http请求不限制文件大小,但外部可能有限制,比如网关、服务端设置post请求http头的文件长度
  前端、网关和服务端限制文件大小提示

 

分布式服务多个分配上传请求要打到同一个服务器
  pod亲和性
  nginx的ip_hash


扩展

  多切片、多文件并发上传

以上是关于大文件上传实现总结的主要内容,如果未能解决你的问题,请参考以下文章

前端实现大文件上传分片上传断点续传

java实现大文件上传

前端实现浏览器端大文件分片上传

前端必学 - 大文件上传如何实现

大文件上传服务器支持超大文件HTTP断点续传实践总结

php如何实现大文件断点续传-php文件