【问题标题】:Azure Blob Storage's ListBlobsSegmentedAsync method doesn't return metadata if metadata value is empty如果元数据值为空,Azure Blob 存储的 ListBlobsSegmentedAsync 方法不会返回元数据
【发布时间】:2021-07-20 13:41:00
【问题描述】:

如果设置了 BlobListingDetails.Metadata 参数 (3rd),则调用 Microsoft.Azure.Storage.Blob (11.1.2) CloudBlobContainer 的 ListBlobsSegmentedAsync 方法会附加 blob 元数据。但是,如果 blob 元数据的 为空,则根本不会返回元数据。

反过来,具有空值的元数据会显示在存储资源管理器中。

BlobResultSegment blobList = await container.ListBlobsSegmentedAsync(blobPath, true, BlobListingDetails.Metadata, null, continuationToken, null, null);
                
foreach (CloudBlockBlob blobItem in blobList.Results)
{
  // trying to access blobItem's metadata
}

编辑:似乎无法通过 Azure 存储 Blob 的 API 创建具有空值的元数据(引发 ArgumentException)。但是,使用 Storage Emulator 是可能的。

我需要上传包含具有空(“”或 null)值的元数据的 blob,是否有可能以某种方式?

编辑 2: 该功能正在使用 Azure.Storage.Blobs v.12.8.3。我正在使用Microsoft.Azure.Storage.Blob v11.1.2所以这个问题适用于这个库!

【问题讨论】:

  • 基本上元数据是不允许设置空值的,但是可以设置值为'null',但还是字符串值
  • @StanleyGong 有没有 value 不能为空的文档?存储模拟器能够使用(看似)空值设置元数据。
  • 是的,我试过了,我们可以通过存储模拟器生成具有空值的元数据。但是不允许使用 SDK 或 REST API,如果使用 SDK,会抛出错误:value can't be a an empty string,如果使用 REST API 将 header x-ms-meta-name 留空,则值将最终为 null
  • 它适用于版本 12 (Azure.Storage.Blobs v12.8.3)!我正在使用 v.11。 @StanleyGong 你用的是什么版本?
  • 哇,很高兴知道您的问题已经解决。当您与此版本共享代码时,我也接受了 v.11 的测试。我将在下面将您的解决方案总结为答案,请接受它以结束此问题,我认为它也会帮助其他人:)

标签: c# azure


【解决方案1】:

使用Azure.Storage.Blobs v12.8.3 适用于添加/检索具有空值的元数据的场景。

更新

这是我尝试通过REST API添加空值元数据的步骤:

结果

虽然我将元数据值保留为空,但要在 Azure 门户上检查其结果,它设置为 null

我也尝试删除文本框中的所有字符,但不允许更新:

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 2015-12-01
    • 2017-08-03
    • 2020-01-01
    • 2019-07-10
    • 2015-08-03
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    相关资源
    最近更新 更多