【发布时间】: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 将 headerx-ms-meta-name留空,则值将最终为null -
它适用于版本 12 (Azure.Storage.Blobs v12.8.3)!我正在使用 v.11。 @StanleyGong 你用的是什么版本?
-
哇,很高兴知道您的问题已经解决。当您与此版本共享代码时,我也接受了 v.11 的测试。我将在下面将您的解决方案总结为答案,请接受它以结束此问题,我认为它也会帮助其他人:)