最近在弄文件上传的功能,由于涉及到大文件就会出现前端提交到后端很慢或者超时的现象。所以本文讲一下断点/分片续传的方案。以下提供三种方案 :前提前端进行根据文件阈值进行切割分片提交多个分片到后台,每次与后台交互进行一个分片交互。涉及前端进度条的问题,可以使用假进度条实现(如果使用真进度条,需要频繁请求后端方知上传真实进度,此方式抛弃)
一、利用数据库记录上传分片的进度
前端把大文件进行按照设定的文件阈值进行分片好,进行提交后台进行上传分片文件,每次上传完分片数据库记录分片信息,下次前端提交上传时,校验该分片是否符合下个分片,整个大文件的分片提交完,则合并分片文件到正式存储目录
二、利用多个临时文件记录上传分片进度
前端把大文件进行按照设定的文件阈值进行分片好,进行提交后台进行上传分片文件,每次上传完分片创建临时文件记录分片信息,下次前端提交上传时,利用是否存在该分片文件且校验分片文件大小,如果不一致则删除分片文件,接收前端上传文件进行上传,整个大文件的分片提交完,则合并分片文件到正式存储目录
三、利用单个临时文件记录上传进度
前端把大文件进行按照设定的文件阈值进行分片好,进行提交后台进行上传分片文件,每次上传分片判断临时文件是否存在,否则需创建临时文件(代表该操作的唯一标识文件),上传的分片文件内容输入到这个临时文件,下次前端提交分片上传时,利用是否存在该临时文件且校验临时文件的大小是否匹配上传的分片开始处大小(每次交互前 前端需请求询问后端该文件上传的最终大小是多少, 以便前端进行续传)继续输入分片内容到临时文件,接收前端上传文件进行上传,整个大文件的分片提交完,则把临时文件拷贝到正式存储的文件进行存储。
推荐使用第三种,相比数据库记录方式可以对第三方进行解耦。