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

.NET 6/ASP.NET Core中更新Azure Storage现有Blob及启用版本控制方法

Azure Blob存储启用版本控制并上传更新文件的实现

一、启用容器的版本控制

Azure Blob容器默认不开启版本控制,必须显式启用,这样后续更新Blob时才会自动保留旧版本。你可以通过代码在创建容器时启用,或者对已存在的容器更新设置:

// 创建容器时直接启用版本控制
await blobContainer.CreateIfNotExistsAsync(new BlobContainerCreateOptions
{
    AccessType = PublicAccessType.None,
    VersioningEnabled = true
});

// 针对已存在的容器,确保版本控制处于启用状态
await blobContainer.SetVersioningPolicyAsync(new BlobVersioningPolicy(BlobVersioningPolicyType.Enabled));

二、修正并更新上传代码

原代码存在变量顺序错误(先调用GetBlobClient再定义fileName),同时建议用using语句自动管理文件流。开启版本控制后,直接覆盖上传Blob就会自动生成新版本,无需额外操作:

var connectionString = _settings.appConfig.StorageConnectionString;
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);

BlobContainerClient blobContainer = blobServiceClient.GetBlobContainerClient("nasir-container");

// 启用容器版本控制
await blobContainer.CreateIfNotExistsAsync(new BlobContainerCreateOptions
{
    AccessType = PublicAccessType.None,
    VersioningEnabled = true
});
await blobContainer.SetVersioningPolicyAsync(new BlobVersioningPolicy(BlobVersioningPolicyType.Enabled));

// 定义本地文件路径
string localFilePath = "D:/Workspace/Adappt/MyWordFile.docx";
// 获取Blob客户端(存储中的Blob名称可自定义,这里用本地文件名)
BlobClient blobClient = blobContainer.GetBlobClient(Path.GetFileName(localFilePath));

// 使用using自动释放流资源
using (FileStream uploadFileStream = System.IO.File.OpenRead(localFilePath))
{
    // 覆盖上传,开启版本控制后会自动生成新版本
    await blobClient.UploadAsync(uploadFileStream, overwrite: true);
}

三、获取特定版本的Blob内容

要访问旧版本的文件,需先获取版本ID,再通过版本ID定位到目标版本:

// 列出该Blob的所有版本
var blobVersions = blobClient.GetVersionsAsync();
await foreach (var version in blobVersions)
{
    Console.WriteLine($"版本ID: {version.VersionId}, 修改时间: {version.LastModified}");
}

// 根据版本ID获取指定版本的Blob
string targetVersionId = "你的目标版本ID";
BlobClient versionedBlobClient = blobContainer.GetBlobClient(blobClient.Name).WithVersion(targetVersionId);

// 下载该版本的文件到本地
using (FileStream downloadStream = System.IO.File.OpenWrite("D:/Workspace/Adappt/旧版本_MyWordFile.docx"))
{
    await versionedBlobClient.DownloadToAsync(downloadStream);
}

关键说明

  • 启用版本控制后,每次覆盖Blob都会自动创建新版本,旧版本会被保留(可通过生命周期规则配置自动清理旧版本)
  • WithVersion方法是访问特定版本Blob的核心
  • 用using管理流资源能避免手动关闭流导致的资源泄漏

内容的提问来源于stack exchange,提问作者mnu-nasir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:06:34