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

使用Azure PowerShell修改Blob属性后Content-Hash丢失问题求助

解决Azure Blob修改Cache-Control后Content-Hash丢失的问题

问题原因

直接操作ICloudBlob.Properties并调用SetProperties()时,若未显式保留原有Content-Hash(MD5)值,该属性会被清空。尽管官方文档提到更新Blob时会自动计算Content-Hash,但仅在重新上传Blob内容时才会触发,单纯修改属性并不会重新计算。

修复方案

方案1:使用BlobClient.SetHttpHeaders(推荐)

该方法允许精准指定要更新的HTTP头,不会影响其他未指定的属性,无需手动维护原有属性:

# 获取目标Blob
$blob = Get-AzStorageBlob -Container $containerName -Blob "gigachad2.jpg" -Context $context

# 仅设置Cache-Control,其他属性保持不变
$headers = @{
    CacheControl = "max-age=3500"
}
$blob.BlobClient.SetHttpHeaders($headers)

方案2:显式保留Content-Hash

如果坚持使用ICloudBlob.SetProperties(),需先获取原有Content-Hash并赋值回Properties,确保不会丢失:

# 获取目标Blob
$blob = Get-AzStorageBlob -Container $containerName -Blob "gigachad2.jpg" -Context $context

# 获取原有属性值
$originalProps = $blob.BlobClient.GetProperties().Value
$contentType = $originalProps.ContentType
$contentHash = $originalProps.ContentHash

# 设置Cache-Control并保留原有属性
$blob.ICloudBlob.Properties.CacheControl = "max-age=3500"
$blob.ICloudBlob.Properties.ContentType = $contentType
$blob.ICloudBlob.Properties.ContentHash = $contentHash

# 更新属性
$blob.ICloudBlob.SetProperties()

说明

  • SetHttpHeaders是Azure.Storage.Blobs SDK提供的现代API,能避免手动维护所有属性的繁琐,优先推荐使用。
  • 若Blob的Content-Hash是上传时生成的,单纯修改属性不会触发重新计算,必须显式保留原有值或重新上传内容才会生成新的哈希值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:44:55