1. 请你实现一个大文件上传和断点续传?
整体思路
- 前端:核心就是利用
Blob.prototype.slice
方法,和数组的slice
方法相似,文件的slice
方法可以返回原文件的某个切片
。预先定义好单个切片大小,将文件切分为一个个切片,然后借助http
的可并发性,同时上传多个切片。这样从原本传一个大文件,变成了并发传多个小的文件切片,可以大大减少上传时间。由于是并发,传输到服务端的顺序可能会发生变化,因此我们还需要给每个切片记录顺序 - 后端:服务端负责接受前端传输的切片,并在接收到所有切片后合并所有切片
- 前端:核心就是利用
问题
- 何时合并切片?(切片什么时候传输完成) 需求前端配合,两种实现方式:第一,前端在每个切片中都携带切片最大数量的信息,当服务端接受到这个数量的切片时自动合并。第二,可以额外发一个请求,主动通知服务端进行切片的合并。
- 如何合并切片?
使用
Nodejs
的 读写流(readStream
/writeStream
),将所有切片的流传输到最终文件的流里