gpt4 book ai didi

Azure 存储按元数据搜索 Blob

转载 作者:行者123 更新时间:2023-12-02 06:32:07 24 4
gpt4 key购买 nike

我有包含元数据的 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"];

谢谢!

最佳答案

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

  1. 该 blob 实际上没有设置任何元数据。设置元数据后,您将调用 blob.SetProperties() 方法,该方法仅设置 blob 的属性(示例中的 ContentType)。要设置元数据,您实际上需要调用 blob.SetMetadata()方法。
  2. 您的上传代码当前正在对存储服务进行 2 次调用:1) 上传 blob 和 2) 设置属性。如果您调用 SetMetadata 则需要 3 次调用。恕我直言,只需执行一次对存储服务的调用即可将这些组合起来,方法如下:

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

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

关于

I also noticed the Metadata is not available when I obtain the blob by itself:

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

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

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

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

关于Azure 存储按元数据搜索 Blob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com