PowerShell上传JSON至Azure Blob Storage时Content-Type设置失效问题
解决Azure Blob Storage上传JSON文件时Content-Type不正确的问题
你遇到的问题是上传JSON内容到Azure Blob后,Blob的Content-Type被默认设置为application/octet-stream,而非预期的application/json。原代码的问题在于多次调用GetBlockBlobReference生成了独立的Blob对象实例,导致后续设置属性的操作未正确关联到已上传的Blob。
修复方案1:上传前直接设置ContentType(推荐)
这种方式一步到位,无需额外调用SetProperties,同时可以规范地指定字符编码:
$Params = @{"URI" = 'https://myapiexample.com/api/data/'} $Result = Invoke-RestMethod @Params | ConvertTo-Json $context = New-AzStorageContext -StorageAccountName "mystorage" -StorageAccountKey "" $container = Get-AzStorageContainer -Name "input" -Context $context $content = [system.Text.Encoding]::UTF8.GetBytes($Result) $blobpath = "azblob/mydata.json" # 获取Blob引用并提前设置ContentType(包含UTF-8编码) $blob = $container.CloudBlobContainer.GetBlockBlobReference($blobpath) $blob.Properties.ContentType = "application/json; charset=utf-8" $blob.UploadFromByteArray($content, 0, $content.Length)
修复方案2:复用Blob引用修复原代码逻辑
如果需要保留先上传再设置属性的流程,核心是复用同一个Blob对象实例,避免重复调用GetBlockBlobReference生成新对象:
$Params = @{"URI" = 'https://myapiexample.com/api/data/'} $Result = Invoke-RestMethod @Params | ConvertTo-Json $context = New-AzStorageContext -StorageAccountName "mystorage" -StorageAccountKey "" $container = Get-AzStorageContainer -Name "input" -Context $context $content = [system.Text.Encoding]::UTF8.GetBytes($Result) $blobpath = "azblob/mydata.json" # 保存Blob引用,后续操作复用该实例 $blob = $container.CloudBlobContainer.GetBlockBlobReference($blobpath) $blob.UploadFromByteArray($content, 0, $content.Length) # 复用同一个引用设置ContentType并保存属性 $blob.Properties.ContentType = "application/json; charset=utf-8" $blob.SetProperties()
说明
- 默认情况下,Azure Blob Storage会将未知类型的上传内容
Content-Type设为application/octet-stream,因此需要显式指定。 - 添加
charset=utf-8符合JSON内容的编码规范,避免后续解析时出现编码问题。
内容的提问来源于stack exchange,提问作者paone
相关产品推荐
相关产品推荐

