前言
在做文件上传,尤其是大文件上传过程中,比如大视频等,经常会碰到这么一种情况,就是用户希望这一次没有上传完,或者中途因为网络原因上传失败了,下一次继续上传的时候可以接着上次没有传完的地方继续上传,这样既可以保证上传的进度,又不用重新上传,避免耗时的等待,这个需求该怎么实现呢?
思路分析
大体来说,可以分为下面几步进行思考
- 对于前端页面来说,考虑到一次上传大文件后端可能承受不住压力,就需要将文件进行分段或分片,比如用户一次上传100MB的文件,前端可以将文件拆分为10份上传,每份10MB,则分片数=10MB,每一片大小为10MB
- 考虑中途会中断的场景,前端页面如果继续发起请求上传,为了能继续上一次的地方进行上传,需要知道是否同一个文件?以及本次继续上传时的分片位置?
- 基于第二条的考虑,需要在上传之前,手动调用一下后台接口,确认下是否执行本次上传
- 对后台来说,需要指定上传的文件路径
- 对于前端传过来的文件,可以根据分片大小以及索引进行文件的区分,如果某一次上传完毕,下一次再次上传时,只需根据索引找到对应的文件即可,怎么找这个文件?怎么知道再次过来的文件就是上一次的那个文件?(可以通过数据库进行相关字段的记录,比如为每个上传的文件生成一个唯一的fileKey)