Engineering上海开奈

Large File Upload (大文件切片)

Project: 企业云盘系统
简历背景

"上海开奈: 实现了大文件切片上传与断点续传核心功能..."

面试题

大文件切片上传的前后端交互流程是怎样的?

前端利用 Blob.prototype.slice 进行切片。计算文件 Hash (SparkMD5) 标识唯一性。上传前先问后端 "这个 Hash 传了多少了?"。后端返回已存在的切片索引。前端过滤掉已传切片,并发上传剩余切片。最后发送 `merge` 请求合并。
**1. 切片 (Slicing):** `file.slice(start, end)`。文件对象 File 继承自 Blob,切片操作是**零拷贝**的,速度很快。 **2. Hash 计算 (Web Worker):** 计算整个文件的 MD5 比较耗时,会阻塞主线程。 **必须**使用 Web Worker 在后台线程计算。 通常使用 `spark-md5` 库,支持增量计算 (append)。 **3. 并发控制:** 不能一次性把 100 个切片请求全发出去,浏览器会卡死。 需要实现一个 Promise 并发调度器 (Limit Concurrency),比如同时只发 6 个请求。 **4. 暂停/恢复:** - 暂停: `XMLHttpRequest.abort()` 取消正在进行的请求。 - 恢复: 重新检查服务端已上传切片,通过过滤列表实现续传。