大文件上传实现方式
前端切片,分片上传,后端接收完切片后合并
判断切片上传完成
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
扩展
多切片、多文件并发上传