使用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
相关产品推荐
相关产品推荐

