未从 blob 上的 azure java sdk 收到元数据字段

Posted

技术标签:

【中文标题】未从 blob 上的 azure java sdk 收到元数据字段【英文标题】:Metadata fields not received from azure java sdk on a blob 【发布时间】:2019-06-09 13:02:16 【问题描述】:

在我们的 Azure 门户中,我创建了一个存储帐户,并在其中创建了一个 blob 容器,其中一个 blob 只是一个简单的文本文件。我还在此处看到的 blob 上设置了一些随机元数据字段。

在我的 java 代码中,当我通过 Azure SDK 访问 Blob 时,我可以打印 Blob 的内容,我可以访问 Etag 等 Blob 属性,并且我可以访问容器元数据。但我无法打印上面看到的 blob 元数据字段。具体来说,从示例页面获取的这段代码不会打印任何内容,因为从 blob.getMetadata() 方法接收到的 HashMap 是空的。

System.out.println("Get blob metadata:"); 
             HashMap<String, String> metadata = blob.getMetadata(); 
             Iterator it = metadata.entrySet().iterator(); 
             while (it.hasNext())  
                Map.Entry pair = (Map.Entry) it.next(); 
                 System.out.printf(" %s = %s%n", pair.getKey(), pair.getValue()); 
                 it.remove(); 
              

如果我改为对 blob 进行 REST API 调用并要求提供元数据字段,我会将它们作为 HTTP 标头返回。但是,如果可能的话,我想通过 SDK 访问它们。

【问题讨论】:

【参考方案1】:

blob.getMetadata() 之前,使用blob.downloadAttributes()

此方法填充 blob 的系统属性和用户定义的元数据。在读取或修改 blob 的属性或元数据之前,请调用此方法或其重载以从 Microsoft Azure 存储服务中检索 blob 的属性和元数据的最新值。

【讨论】:

以上是关于未从 blob 上的 azure java sdk 收到元数据字段的主要内容,如果未能解决你的问题,请参考以下文章

在 Java SDK 中模拟 Azure 存储 Blob

Blob 存储 java sdk 由 azure AD 授权

Azure blobs Java sdk 无法返回对象的 versionID 列表

适用于 blob 的 Azure Java SDK - 已请求加载默认 HttpClient 提供程序,但在类路径中找不到该提供程序

Azure Storage Blob Go SDK示例

使用 Blob 服务客户端查找 azure 帐户密钥失败(azure python sdk)