此页内容

05、什么是文件分片上传和断点续传,如何实现?

797字约3分钟

2025-02-16

分片上传:将一个大文件拆分为多块,逐一上传放到服务器。这样可以并发上传各个分片,提高带宽利用率,同时如果部分分片上传失败,只需要重传失败的分片。

断点续传:在网络中断或上传过程中出现异常时,客户端可从上传成功的分片或位置继续上传,实现更加稳定、高效的是上传。

实现

分片上传

  1. 分片上传的目的是将大文件切割为多个小块,实现并发上传以提高传输速度。
  2. 分片上传可以按配置的分片大小(例如1M一个分片)将大文件分割。
  3. 前端项目将切割的每个分片按顺序上传至后端服务器。
  4. 后端收到分片后可以暂存于本地,并记录这个分片的特征信息,如分片序号、文件MD5等,写入到数据库。
  5. 全部分片上传完成后,后端按序号顺序重新组装成原完整文件。

断点续传

  1. 前端在上传文件时,将文件切成多个小块,每次上传一个小块。
  2. 每上传一个小块,后端会记录这个小块的信息,比如该小块的序号、文件MD5、内容Hash等。可以保存在MySQL数据库中。
  3. 如果上传中断了,前端可以向后端询问已经上传了哪些小块。
  4. 后端从数据库中查询,返回已上传小块的信息给前端。
  5. 前端就可以接着只上传中间中断的那一部分小块。
  6. 后端会根据小块的序号、文件MD5来把这些小块重新拼接成完整的文件。

分片上传 + 断点续传

  1. 分片上传的目的是将大文件切割为多个小块,实现并发上传以提高传输速度。
  2. 分片上传可以按配置的分片大小(例如1M一个分片)将大文件分割。
  3. 前端项目将切割的每个分片按顺序上传至后端服务器。
  4. 每上传一个小块,后端会记录这个小块的信息,比如该小块的序号、文件MD5、内容Hash等。可以保存在MySQL数据库中。
  5. 如果上传中断了,前端可以向后端询问已经上传了哪些小块。
  6. 后端从数据库中查询,返回已上传小块的信息给前端。
  7. 前端就可以接着只上传中间中断的那一部分小块。
  8. 后端会根据小块的序号、文件MD5来把这些小块重新拼接成完整的文件。
  9. 以后如果这个文件再次上传,通过MD5值就可以知道该文件已经存在了,则直接返回上传成功,无需上传实际内容。这样通过切片上传和持久化记录已上传切片的信息,就可以实现断点续传。