You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用React和Node.js(服务端)向Blob Storage上传200MB+大文件且不存服务器

Azure Blob 大文件分片上传(React 前端实现)

核心流程(对应 AWS Multipart Upload 逻辑)

  • 初始化分片上传:创建Blob客户端,准备分片上传会话
  • 上传分片(Chunk):逐个上传文件分片,记录每个分片的ID
  • 完成分片上传:提交所有分片ID,合并成完整文件

实现步骤

1. 安装依赖

npm install @azure/storage-blob

2. 初始化分片上传

从后端获取Blob SAS URL(前端禁止直接使用存储账户密钥,防止泄露),通过该URL创建BlockBlobClient实例:

import { BlockBlobClient } from "@azure/storage-blob";

// 从后端获取的带上传权限的Blob SAS URL
const sasUrl = "YOUR_BLOB_SAS_URL";
const blockBlobClient = new BlockBlobClient(sasUrl);

// 初始化分片ID列表,用于记录所有成功上传的分片
const blockIds = [];

3. 上传单个分片

将文件分割为固定大小的分片(推荐10MB),逐个上传:

async function uploadChunk(file, start, end, chunkIndex) {
  const chunk = file.slice(start, end);
  // 生成Base64编码的唯一分片ID
  const blockId = btoa(`block-${chunkIndex}`);
  // 上传分片到Blob存储
  await blockBlobClient.stageBlock(blockId, chunk);
  blockIds.push(blockId);
}

// 示例:分割文件并批量上传
const file = document.getElementById("file-input").files[0];
const chunkSize = 10 * 1024 * 1024; // 10MB分片大小
const totalChunks = Math.ceil(file.size / chunkSize);

for (let i = 0; i < totalChunks; i++) {
  const start = i * chunkSize;
  const end = Math.min(start + chunkSize, file.size);
  await uploadChunk(file, start, end, i);
}

4. 完成分片上传

所有分片上传成功后,提交分片列表合并为完整文件:

async function completeUpload() {
  await blockBlobClient.commitBlockList(blockIds);
  console.log("文件上传完成!");
}

// 触发完成上传操作
await completeUpload();

关键注意事项

  • 分片限制:Azure Blob单个分片最大支持100MB,总分片数最多50000个
  • SAS URL权限:确保SAS URL包含w(写入)权限,且有效期覆盖整个上传周期
  • 断点续传:可通过blockBlobClient.getBlockList()获取已上传的分片ID,跳过重复上传
  • 错误处理:分片上传失败时需加入重试逻辑,避免丢失上传进度

内容的提问来源于stack exchange,提问作者Bhavin Verma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:57:13