C#操作Azure Storage:如何向已存在的容器上传文件
向Azure Storage已有容器上传文件(C#)& 容器上限说明
我来帮你解决这两个问题:
一、如何向已存在的容器上传文件
你报错“容器已存在”,大概率是保留了官方示例里的容器创建代码(比如调用了Create()而非CreateIfNotExists())。既然你已经提前在Azure Portal创建了testresult1容器,直接跳过创建步骤,获取容器引用后上传文件即可。
方法1:使用旧版SDK(Microsoft.Azure.Storage.Blob)
如果你还在使用旧的存储SDK,代码示例如下:
using Microsoft.Azure.Storage; using Microsoft.Azure.Storage.Blob; using System.IO; using System.Threading.Tasks; class Program { static async Task Main() { // 替换为你的存储账户连接字符串 string connectionString = "YourStorageAccountConnectionString"; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); // 创建Blob客户端 CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // 获取已存在的容器引用(关键:不要调用Create()!) CloudBlobContainer container = blobClient.GetContainerReference("testresult1"); // 上传单个文件 string localFile = @"C:\temp\sample.txt"; string blobName = "uploaded-sample.txt"; // 容器中Blob的名称 CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName); await blockBlob.UploadFromFileAsync(localFile); // 批量上传多个文件 string[] filesToUpload = { @"C:\temp\file1.jpg", @"C:\temp\file2.pdf" }; foreach (var filePath in filesToUpload) { string fileName = Path.GetFileName(filePath); CloudBlockBlob blob = container.GetBlockBlobReference(fileName); await blob.UploadFromFileAsync(filePath); } } }
注意:如果你不确定容器是否存在,可以调用
await container.CreateIfNotExistsAsync();,这个方法会在容器不存在时创建,存在时返回false且不会报错。但既然你已经提前创建了,完全可以跳过这一步。
方法2:使用新版SDK(Azure.Storage.Blobs,推荐)
微软现在推荐使用新版的Azure存储SDK(更轻量、性能更好),代码示例:
using Azure.Storage.Blobs; using System.IO; using System.Threading.Tasks; class Program { static async Task Main() { string connectionString = "YourStorageAccountConnectionString"; BlobServiceClient serviceClient = new BlobServiceClient(connectionString); // 获取已存在的容器引用 BlobContainerClient containerClient = serviceClient.GetBlobContainerClient("testresult1"); // 上传单个文件 string localFile = @"C:\temp\sample.txt"; using FileStream stream = File.OpenRead(localFile); await containerClient.UploadBlobAsync("uploaded-sample.txt", stream); // 批量上传 string[] filesToUpload = { @"C:\temp\file1.jpg", @"C:\temp\file2.pdf" }; foreach (var filePath in filesToUpload) { string fileName = Path.GetFileName(filePath); using FileStream fileStream = File.OpenRead(filePath); await containerClient.UploadBlobAsync(fileName, fileStream); } } }
二、Azure Storage容器创建上限说明
每个Azure存储账户最多可以创建500,000个容器,这个上限是针对单个存储账户的,和Azure订阅没有直接关联。不过你的订阅会有存储账户数量的默认上限(每个区域25个,可通过支持工单申请提升),所以间接影响你能创建的总容器数,但单存储账户的容器上限是固定的50万。
内容的提问来源于stack exchange,提问作者Sohel
相关产品推荐
相关产品推荐

