项目中遇到上传大文件的需求(上传视频、大的execl对账表格等),特此记录解决方案,有不足之处望斧正。
解决思路
- 将大文件在前端生成签名后,请求后端接口,检测出该文件之前是否上传过,后端返回该文件应上传的字节起始位置。(如果第一次上传,那么起始位置就是0)
- 前端拿到起始位置后,根据文件总大小计算出剩余还需上传的字节数
- 前端根据一定大小的字节数将剩余所需上传的字节数进行切割成块(向上取整),然后分别将这些数据块依次构建
form-data
表单提交上传。 - 后端接收到上传过来的数据块,写入文件。
Demo环境说明
- 前端:
Vue
,axios
- 后端:
Node.js
,koa
,koa-body
具体实现
- 前端
1 |
|
- 后端
1 | /** |