分片上传时如何确保所有分片都成功上传了?

Air-康平 阅读 18

我用 JavaScript 做大文件分片上传,前端把文件切成 10MB 一块发给后端。但有时候网络不好,个别分片没传成功,但我不知道是哪一块丢了,最后合并就出错。

现在我在每个请求里加了 chunkIndex,但怎么判断所有分片都收到了?有没有靠谱的校验机制?比如前端传完所有分片后发个“完成”请求,后端再检查数量对不对?

const uploadChunk = async (chunk, index) => {
  const formData = new FormData();
  formData.append('chunk', chunk);
  formData.append('index', index);
  await fetch('/upload', { method: 'POST', body: formData });
};
我来解答 赞 5 收藏
二维码
手机扫码查看
1 条解答
公孙慧利
搞分片上传最常见的问题就是这个了。最简单靠谱的方案是前后端都维护一个分片索引记录,传完后让前端发个校验请求,后端比对收到的分片数。

前端可以这样改:
const totalChunks = 10; // 假设总共10个分片
const uploadedIndexes = new Set();

const uploadChunk = async (chunk, index) => {
const formData = new FormData();
formData.append('chunk', chunk);
formData.append('index', index);
await fetch('/upload', { method: 'POST', body: formData });
uploadedIndexes.add(index);

if(uploadedIndexes.size === totalChunks) {
await fetch('/complete', {
method: 'POST',
body: JSON.stringify({total: totalChunks})
});
}
};


后端收到complete请求后,检查自己收到的分片数量是否匹配,不匹配就返回缺失的分片索引让前端重传。
点赞
2026-03-08 22:03