使用 Azure.Storage.Blobs SDK 操作 Blob:安装包后,用连接字符串或共享密钥初始化 BlobServiceClient;创建容器时设 PublicAccessType.Blob 实现匿名读;上传/下载/删除用 BlobClient;列表支持前缀过滤;SDK 自动处理大文件分块。

用 C# 操作 Azure Blob Storage,核心是使用 Azure SDK for .NET(即 Azure.Storage.Blobs 包),它比旧版 Microsoft.Azure.Storage.Blob 更现代、更轻量、更符合 .NET 标准。下面直接讲清楚怎么上手、怎么写关键代码。
安装 SDK 并初始化客户端
在项目中通过 NuGet 安装最新稳定版:
red">Install-Package Azure.Storage.Blobs拿到存储账户的连接字符串(或账户名+密钥/Token)后,创建 BlobServiceClient:
- 用连接字符串(开发/测试常用):
var connectionString = "DefaultEndpointsProtocol=https;AccountName=xxx;AccountKey=xxx;EndpointSuffix=core.windows.net"; var serviceClient = new BlobServiceClient(connectionString);
- 用账户名 + 共享密钥(更安全,推荐生产环境):
var credential = new StorageSharedKeyCredential("myaccount", "mykey");
var serviceClient = new BlobServiceClient(new Uri("https://myaccount.blob.core.windows.net"), credential);
创建容器并设置访问级别
Blob 必须存放在容器(Container)里。默认容器是私有(private)的,如需公开读取(比如放静态资源),要显式设为 BlobContainerPublicAccessType.Blob:
var containerClient = serviceClient.GetBlobContainerClient("mycontainer");
await containerClient.CreateIfNotExistsAsync(PublicAccessType.Blob); // 允许匿名读 blob
-
PublicAccessType.None:仅授权用户可访问(默认) -
PublicAccessType.Container:可匿名列容器内 blob 列表 -
PublicAccessType.Blob:可匿名读单个 blob(最常用)
上传、下载和删除 Blob
操作单个文件(blob)时,用 GetBlobClient 获取具体 blob 引用:
- 上传本地文件:
var blobClient = containerClient.GetBlobClient("photos/cat.jpg");
await blobClient.UploadAsync("D:\\cat.jpg", new BlobHttpHeaders { ContentType = "image/jpeg" });
- 上传字节数组或流(适合内存中生成的内容):
await blobClient.UploadAsync(stream, new BlobHttpHeaders { ContentType = "text/plain" });
- 下载到本地文件:
await blobClient.DownloadToAsync("D:\\downloaded-cat.jpg");
- 删除 blob:
await blobClient.DeleteIfExistsAsync();
列出 Blob 和处理大文件
批量操作用 GetBlobsAsync,支持分页和前缀过滤:
await foreach (var blob in containerClient.GetBlobsAsync(prefix: "logs/2024-06-"))
{
Console.WriteLine(blob.Name);
}
上传超大文件(如 >256MB)建议用分块上传(StartUploadAsync + StageBlockAsync + CommitBlockListAsync),但一般场景直接用 UploadAsync 即可——SDK 内部会自动分块处理。
基本上就这些。关键点:用对 SDK 包、连对凭证、设对容器权限、传对 ContentType。不复杂但容易忽略细节,比如忘了设 public access 就无法外网访问,或者没加 ContentType 导致浏览器下载而非预览。










