前言
无论是面试还是实际工作,我们都会遇到大文件上传的问题。事实上,在我之前的面试中,也被问到上传大文件(Excel)如何处理,当时答的磕磕巴巴,直接导致整个面试以失败结束。 最近想起了整个事情,花了点时间,整理出这个demo,当然了,整篇文章,不仅仅讲思路过程,最后也会附送源码
前端:Vue.js Element-Ui
后端:node.js express fs
思路
前端
大文件上传
- 将大文件转换成二进制流的格式
- 利用流可以切割的属性,将二进制流切割成多份
- 组装和分割块同等数量的请求块,并行或串行的形式发出请求
- 待我们监听到所有请求都成功发出去以后,再给服务端发出一个合并的信号
断点续传
- 为每一个文件切割块添加不同的标识
- 当上传成功的之后,记录上传成功的标识
- 当我们暂停或者发送失败后,可以重新发送没有上传成功的切割文件
后端
- 接收每一个切割文件,并在接收成功后,存到指定位置,并告诉前端接收成功
- 收到合并信号,将所有的切割文件排序,合并,生成最终的大文件,然后删除切割小文件,并告知前端大文件的地址
其实说到这里,如果你看懂并且理解了以上的思路,那么你已经学会了大文件上传+断点续传的 80%。下面的具体实现过程,对你来讲,就是小意思...
大文件上传代码部分
本次html部分,我们使用了 El