【问题标题】:Azure Storage Search Blobs by Metadata按元数据的 Azure 存储搜索 Blob
【发布时间】:2015-12-01 13:34:44
【问题描述】:

我有包含元数据的 CloudBlockBlob。

CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob.jpg");

using (var fileStream = System.IO.File.OpenRead(filePath))
{ 
 blockBlob.UploadFromStream(fileStream);
 blockBlob.Properties.ContentType = "image/jpg";
 blockBlob.Metadata.Add("Title", "Yellow Pear");
 blockBlob.SetProperties();
}

我看到元数据在那里:

Debug.WriteLine(blockBlob.Metadata["Title"]);

现在,如果我从存储中查询,我会看到 blob,但缺少元数据: (在下面我知道 blobItems[0] 上传时有元数据,但现在 blobItems[0].Metadata.Count == 0)

var blobItems = container.ListBlobs(
    null, false, BlobListingDetails.Metadata);

我还注意到,当我自己获取 blob 时,元数据不可用:

CloudBlockBlob a = container.GetBlockBlobReference("myblob.jpg");
//Below throws an exception
var b = a.Metadata["Title"];

谢谢!

【问题讨论】:

    标签: azure azure-blob-storage


    【解决方案1】:

    您的代码存在一些问题:(。

    1. Blob 实际上没有设置任何元数据。设置元数据后,您将调用 blob.SetProperties() 方法,该方法仅设置 blob 的属性(在您的示例中为 ContentType)。要设置元数据,您实际上需要调用blob.SetMetadata() 方法。
    2. 您的上传代码目前正在对存储服务进行 2 次调用:1) 上传 blob 和 2) 设置属性。如果你打电话给SetMetadata,那将是 3 个电话。恕我直言,通过执行以下操作,只需 1 次调用存储服务即可将这些组合起来:

          using (var fileStream = System.IO.File.OpenRead(filePath))
          {
              blockBlob.Properties.ContentType = "image/jpg";
              blockBlob.Metadata.Add("Title", "Yellow Pear");
              blockBlob.UploadFromStream(fileStream);
          }
      

    这不仅会上传 blob,还会在对存储服务的一次调用中设置它的属性和元数据。

    关于

    我还注意到当我通过以下方式获取 blob 时元数据不可用 本身:

    CloudBlockBlob a = container.GetBlockBlobReference("myblob.jpg");
    //Below throws an exception
    var b = a.Metadata["Title"];
    

    基本上,上面的代码只是在客户端创建一个 blob 实例。它实际上并不获取 blob 的属性(和元数据)。要获取有关 blob 的详细信息,您需要在 blob 上调用 FetchAttributes 方法。比如:

    CloudBlockBlob a = container.GetBlockBlobReference("myblob.jpg");
    a.FetchAttributes();
    

    如果之后您检索 blob 的元数据,您应该能够看到它(前提是元数据已正确创建)。

    【讨论】:

      猜你喜欢
      • 2017-06-13
      • 2018-03-10
      • 2016-12-02
      • 2016-08-14
      • 2018-07-06
      • 2017-05-03
      • 2020-09-19
      • 2017-09-16
      • 1970-01-01
      相关资源
      最近更新 更多