分片上传
关于大文件分片上传的一些思考
浏览器
创建文件 hash
- 创建文件的
hash
值。 - 提交上传文件基本数据和文件
hash
值。 - 如果存在的话,忽略本次文件上传;并将该文件路径指向用户服务器存储空间中。
当文件不存在或上传一部分文件数据时,进入下一流程。
文件分片
- 访问服务器获取文件分片最大值。
- 通过循环切割文件,并创建每一个分片的
hash
文件上传
- 根据首次与服务器通信结果,判断是否为断点上传
- 如果是断点上传,判断断点位置,
- 获取对应分片,以此分片为起点开始上传
进度条
- 不论是断点还是首次上传文件,进度条为已传分片数除总分片数
服务器
检测文件 hash
数据库检测 hash
是否存在
存在
- 将该文件与用户传入文件基本信息结合
- 存入云空间
- 通知前端,文件秒传成功
不存在或断点
- 创建临时上传空间(存在时间为最后断点上传后的
24
个小时或上传成功后) - 用户云盘数据中写入临时上传信息(存在时间为最后断点上传后的
24
个小时或上传成功后) - 如果是断点之后续传,告知前端最后一个分片
hash
文件上传
- 获取分片数据,存入临时上传空间
- 上传所有分片,合并分片,创建文件 hash,与文件原 hash 比对
- hash 不一致,告知用户上传失败
- hash 确认无误,放入用户云盘中
- 清理数据