定义
断点续传的技术主要应对大文件上传的挑战,确保用户体验。它允许文件在中断后能从停止点继续上传,而不是重新开始。这项技术依赖于分片上传(将大文件切分为小块进行上传)和断点续传(在中断后继续上传未完成的部分)的结合使用。
分片上传
分片上传涉及将大文件切割成多个小块(或称为‘分片’),然后分别上传。这个过程通常包括以下步骤:
-
客户端将大文件按照预定规则(如每 10MB 一块),分割成多个小块。初始化上传会话,服务器返回一个唯一的上传标识,用于后续的通信。
-
客户端并行或串行上传各个文件块。
-
完成所有文件块的上传后,服务器检查是否所有部分都已上传,并进行重组以恢复原始文件上传。
断点续传
-
上传过程中,服务器将接收到的文件块存储为临时文件。
-
如果上传中断,下次上传时客户端询问服务器已上传的数据量,并从该点继续上传。
-
客户端从上次停止的地方继续读取并上传文件的剩余部分。
-
服务器从上次停止的地方继续写入临时文件,直到上传完成。
断点续传过程总结: 获取文件,并为其生成一个唯一标识(如使用文件的 MD5 值)。根据唯一标识和已上传的分片信息,判断文件上传的进度。根据进度信息,从最后一次成功上传的分片之后开始上传剩余分片。完成所有分片的上传后,服务器合并这些分片,重新构造原始文件。
使用场景
- 加速大文件上传:通过并行上传多个分片,提高上传速度。
- 网咯环境不佳:在网络不稳定时,只需要重新上传失败的分片,而不是整个文件。
- 流式上传:在不确定文件最终大小的情况下开始上传,常见于视频监控等应用。
扩展思考
虽然以上提供了基础的实现框架,但在实际应用中还需考虑:
-
如何处理上传失败的分片。
-
如果用户在上传过程中刷新页面,如何保持上传进度。
-
并行与串行上传的最佳实践。
-
切片策略:何时根据数量切割,何时根据大小切割。
-
如何利用 Web worker 处理大文件上传,避免阻塞 UI。
-
实现秒传功能,对之前已上传的文件实现快速识别和跳过。