流程图 根据流程图,下面详细说一下具体的实现 选择文件 基于 el-upload 实现;用户选择文件之后,监听 el-upload 的Change事件,将 File 对象保存;原生的实现也是同理只要保存 File 对象就行。 当用户点击提交之后才进行分片操作,不然等待分片完成才提交需要一定时间(770MB的文件耗时是16s) 文件分片&计算文件hash值 为了判断文件是否上传过,必须使用根据文件内容生成的hash值判断。而这个过程可以在分片的时候计算。通过 SparkMD5 进行增量更新,这里的增量更新是指:在计算第一个分块的哈希值后,对接下来的分块只计算新增内容的哈希值,而不是对整个分块重新计算。 其他方案:之前前后两个完整的分块,其他分块分别只取前中后几个字节计算。这种方案可以大大减少时间,但是无法确保hash值的唯一性。 这里我们使用第一种方案,同时文件切片的执行交由 Web Worker 处理。 代码实现: import SparkMD5 from 'spark-md5'; const DefaultChunkSize = 1024 * 1024 * 50;...