在 .NET 應用中整合 Azure Blob Storage,官方提供成熟的 Azure.Storage.Blobs SDK (v12+),支援 .NET Core / .NET 5+ / .NET Framework 4.6.2+。以下是從環境準備到生產部署的完整路徑。
DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net)。.NET SDK 8.0+。dotnet add package Azure.Storage.Blobsdotnet add package Azure.Identity (支援 Managed Identity / DefaultAzureCredential)using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Identity;
public class BlobService
{
private readonly BlobContainerClient _container;
public BlobService(string connectionString, string containerName)
{
_container = new BlobContainerClient(connectionString, containerName);
_container.CreateIfNotExists(PublicAccessType.None); // 私有容器
}
// 上傳 (支援大檔案分塊)
public async Task UploadAsync(string blobName, Stream content, CancellationToken ct = default)
{
var blob = _container.GetBlobClient(blobName);
await blob.UploadAsync(content, new BlobHttpHeaders { ContentType = "application/octet-stream" }, cancellationToken: ct);
}
// 下載至 Stream
public async Task DownloadAsync(string blobName, Stream destination, CancellationToken ct = default)
{
var blob = _container.GetBlobClient(blobName);
await blob.DownloadToAsync(destination, ct);
}
// 列舉
public async IAsyncEnumerable ListAsync(string prefix = null)
{
await foreach (var item in _container.GetBlobsAsync(prefix: prefix))
yield return item;
}
// 產生 SAS URL (限時下載)
public string GenerateSasUrl(string blobName, TimeSpan expiry)
{
var blob = _container.GetBlobClient(blobName);
var sasBuilder = new BlobSasBuilder
{
BlobContainerName = _container.Name,
BlobName = blobName,
Resource = "b",
ExpiresOn = DateTimeOffset.UtcNow.Add(expiry)
};
sasBuilder.SetPermissions(BlobSasPermissions.Read);
return blob.GenerateSasUri(sasBuilder).ToString();
}
}
BlobClient.UploadAsync 內建分塊 (預設 4 MB/塊,可透過 BlobClientOptions.TransferOptions 調整)。TransferValidationOptions 自動 MD5/CRC64 校驗。new Progress<long>(bytes => Console.WriteLine($"Uploaded {bytes}"))。| 工具 | 用途 | 連結 |
|---|---|---|
| Azure Storage Explorer | 跨平台 GUI:上傳/下載、設定 CORS/生命週期/靜態網站、產生 SAS、查看計量 | 官網下載 |
| AzCopy v10 | 命令列高效批量複製/同步/刪除,支援 SAS/OAuth,適合 CI/CD 與資料遷移 | 文件 |
| Azure Portal | 容器/Blob 層級存取原則、生命週期管理規則、診斷記錄、沉浸式瀏覽 | portal.azure.com |
| Visual Studio Cloud Explorer | IDE 內直接瀏覽 Blob、開啟/下載、設定中繼資料 | VS 安裝 Azure workload 即得 |
DefaultAzureCredential (Managed Identity) 免存連接字串;SAS 權限限縮至單一 Blob/容器、Read/Write/Delete 最小集、過期時間 ≤ 1 小時。$web 容器,啟用 CDN (Azure Front Door / CDN) 加速,免維護 Web Server。掌握上述 SDK 用法、工具鏈與治理策略,即可在 .NET 專案中高效、安全地運用 Azure Blob Storage,支援從 KB 級日志到 PB 級資料湖的各類儲存場景。