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

使用C#向Azure Storage上传40MB文件失败求助

解决Azure Blob存储大文件上传卡住的问题

你遇到的大文件上传卡住问题,大概率是因为默认的单块/自动分块上传配置不适合大文件场景,再加上你用的是旧版Azure Storage SDK(CloudStorageAccount这类属于Legacy SDK,已经停止维护),这类SDK在大文件上传时的默认配置容易出现超时或卡顿。下面给你两种实用解决方案:


方案1:升级到新版Azure.Storage.Blobs SDK(推荐)

新版SDK(v12+)针对大文件上传做了针对性优化,支持更灵活的分片上传控制,性能和稳定性都比旧版好很多。

实现步骤

首先安装NuGet包:Azure.Storage.Blobs

然后替换你的上传代码:

using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;

var storageConnectionString = "XXXXXXX";
var blobServiceClient = new BlobServiceClient(storageConnectionString);

// 获取目标容器
var blobContainerClient = blobServiceClient.GetBlobContainerClient("YourContainerName");
await blobContainerClient.CreateIfNotExistsAsync();

// 获取要上传的Blob引用
var blobClient = blobContainerClient.GetBlobClient("YourTargetFileName");

// 配置大文件上传参数:设置分块大小、并行上传数
var uploadOptions = new BlobUploadOptions
{
    TransferOptions = new StorageTransferOptions
    {
        MaximumConcurrency = 4, // 并行上传的分块数量,根据网络调整
        InitialTransferSize = 10 * 1024 * 1024, // 初始分块大小(10MB)
        MaximumTransferSize = 10 * 1024 * 1024 // 最大分块大小(10MB)
    }
};

// 执行上传
await blobClient.UploadAsync(@"YourLocalFileFullPath", uploadOptions);

方案2:在旧版SDK中优化上传配置

如果你暂时无法升级SDK,可以修改旧代码的分块和超时配置,强制启用分片上传并设置合理参数:

修改后的代码

using Microsoft.Azure.Storage;
using Microsoft.Azure.Storage.Blob;

var storageConnectionString = "XXXXXXX";
var storageAccount = CloudStorageAccount.Parse(storageConnectionString);
var blobClient = storageAccount.CreateCloudBlobClient();

// 获取目标容器
CloudBlobContainer videosContainer = blobClient.GetContainerReference("YourContainerName");
await videosContainer.CreateIfNotExistsAsync();

// 获取Blob引用
CloudBlockBlob blockBlob = videosContainer.GetBlockBlobReference("YourTargetFileName");

// 配置分块大小、超时和重试策略
blockBlob.StreamWriteSizeInBytes = 10 * 1024 * 1024; // 设置分块大小为10MB
blobClient.DefaultRequestOptions.ServerTimeout = TimeSpan.FromMinutes(5); // 设置单次请求超时
blobClient.DefaultRequestOptions.RetryPolicy = new ExponentialRetry(TimeSpan.FromSeconds(5), 3); // 设置重试策略

// 执行上传
await blockBlob.UploadFromFileAsync(@"YourLocalFileFullPath");

关键注意点

  • 分块大小选择:分块太小会增加请求次数,太大则容易单块超时,推荐根据你的网络带宽调整在10MB-100MB之间。
  • 超时与重试:一定要设置合理的请求超时和重试策略,避免因为临时网络波动导致上传卡住。
  • 旧版SDK风险:旧的Microsoft.Azure.Storage.Blob已经停止更新,后续不会有bug修复和性能优化,建议尽早升级到新版SDK。

内容的提问来源于stack exchange,提问作者alan samuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:35:11