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

Azure存储C#开发:CloudBlockBlob无Blob层级设置方法,如何修改?

解决C#修改Azure Blob层级的问题

哈哈,刚好之前处理过一模一样的问题!你提到的CloudBlockBlob属于旧版的Azure存储SDK(就是那个Microsoft.WindowsAzure.Storage包),确实没给直接设置Blob层级的方法,当初我也懵了一阵。不过不管是换用新版SDK,还是在旧代码里兼容处理,都能搞定把Blob从Hot改成Cool的需求,给你两种实用方案:

方案一:使用新版Azure Blob存储SDK(强烈推荐)

新版SDK是官方现在主推的,功能更全也更易用,而且已经封装了你提到的Set Blob Tier逻辑,步骤很简单:

  1. 先安装NuGet包:
    用Package Manager控制台:

    Install-Package Azure.Storage.Blobs
    

    或者用.NET CLI:

    dotnet add package Azure.Storage.Blobs
    
  2. 编写代码修改Blob层级:

    using Azure.Storage.Blobs;
    using Azure.Storage.Blobs.Models;
    
    // 替换成你的存储账户连接字符串、容器名和Blob名
    var connectionString = "Your_Storage_Account_Connection_String";
    var containerName = "target-container";
    var blobName = "example-blob.txt";
    
    // 初始化Blob服务客户端
    var blobServiceClient = new BlobServiceClient(connectionString);
    // 获取目标容器和Blob的客户端
    var blobContainerClient = blobServiceClient.GetBlobContainerClient(containerName);
    var blobClient = blobContainerClient.GetBlobClient(blobName);
    
    // 直接调用API将层级从Hot改为Cool
    await blobClient.SetAccessTierAsync(AccessTier.Cool);
    

    这个方法内部已经帮你处理了REST请求的签名和调用,不用自己手动写底层逻辑。

方案二:在旧版SDK中手动调用REST API(兼容现有旧代码)

如果暂时没法迁移到新版SDK,也可以手动构造REST请求来实现。这里有两种写法:

写法一:用HttpClient发送签名后的请求

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Net.Http;
using System.Threading.Tasks;

var storageAccount = CloudStorageAccount.Parse("Your_Storage_Account_Connection_String");
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("target-container");
var blockBlob = container.GetBlockBlobReference("example-blob.txt");

// 构造Set Blob Tier的请求地址
var targetTier = "Cool";
var requestUri = $"{blockBlob.Uri}?comp=tier&tier={targetTier}";

// 用存储账户凭证签名请求
var request = new HttpRequestMessage(HttpMethod.Put, requestUri);
storageAccount.Credentials.SignRequest(request);

// 发送请求并确保成功
using (var httpClient = new HttpClient())
{
    var response = await httpClient.SendAsync(request);
    response.EnsureSuccessStatusCode();
}

写法二:用旧SDK的ExecuteAsync方法

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;
using System.Threading.Tasks;

var storageAccount = CloudStorageAccount.Parse("Your_Storage_Account_Connection_String");
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference("target-container");
var blockBlob = container.GetBlockBlobReference("example-blob.txt");

// 调用ExecuteAsync执行Set Tier操作
await blockBlob.ExecuteAsync(
    HttpMethod.Put,
    new BlobRequestOptions(),
    new OperationContext(),
    new[] 
    { 
        new NameValuePair("comp", "tier"), 
        new NameValuePair("tier", "Cool") 
    });

最后提一句:旧版SDK已经停止维护了,官方也建议尽快迁移到新版,后续的新功能和bug修复都只会在新版SDK里更新哦。

内容的提问来源于stack exchange,提问作者Martin Dawson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:53:12