【问题标题】:BlobItem from an URI来自 URI 的 BlobItem
【发布时间】:2021-07-31 17:52:52
【问题描述】:

如何获取我知道其全名/URI 的BlobItem? 我有可用的 AccountName、AccountKey;如果需要,我可以生成一个 SAS URI。

  • blobContainerClient.GetBlobs(prefix: $"{fullName}").Single();似乎是直截了当的方法,但这实际上是一个(大规模)代价高昂的查询
  • BlobModelsFactory 似乎明确地用于模拟目的
  • BlobItem 没有构造函数,也没有可公开设置的属性

【问题讨论】:

  • 您能否编辑您的问题并包括以下内容:1) 您使用的是简单的 blob URI 还是 SAS URI,以及 2) 您是否有权访问存储帐户凭据?
  • 问题已更新;我有可用的 AccountName、AccountKey;如果需要,我可以生成一个 SAS URI。我拥有存储帐户的完全访问权限。
  • 只是好奇,你想用 BlobItem 做什么?
  • 我的应用程序使用 [很多] 块块(列表名称、大小、层、文件夹、uri,...)来做各种事情。我可以创建一个具有所有这些属性的自定义 BlobItem ,但这就像重新发明轮子一样;或者,我可以用 BlobClient 解决(做很多相同的事情),但它是一个更重的对象。 -- 不管表现如何,好奇如何获得 BlobItem / 为什么获得它并不简单
  • ????。请不要让我开始使用新的 SDK。这是我见过的最不友好的 SDK 之一。

标签: .net-core azure-blob-storage


【解决方案1】:

您可以尝试下面的代码来获取 blob 的属性:

   var blobClient = new BlobClient(new Uri("<Blob URI with sas token>"));

    var blobProperties = blobClient.GetProperties().Value;

【讨论】:

  • Tx Stanley,我对 blobContainerClient.GetBlobs(prefix:fullName).Propertiesnew BlobClient(fullName).GetProperties().Value 进行了一些 BenchmarkDotNet 测试。总之,它们大致相同(时间/内存/http调用)。考虑 1:GetBlobs 是一个 LIST 调用并且更昂贵(0.050$/10k ops),GetProperties 是 0.004$/10k ops。注意事项 2:GetBlobs 在 1 次调用中获得更多信息,而 blobClient.Exist() 是第二次调用 - 总时间与 GetBlobs 相比增加了一倍,并且根据用例,这些都将是额外的调用。总之,我还不确定如何进行
  • @WouterVanRanst,我明白了,我想你可以直接调用get-blob-properties rest API:docs.microsoft.com/en-us/rest/api/storageservices/…,如果 blob 不存在或已被删除,你将得到 404,无需调用 @ 987654326@函数。
  • 谢谢斯坦利。我接受了这个作为答案。 FWIW/FYI 我为 BlobItem 和 BlobClient 创建了一个自定义适配器,它隐藏了实现细节。
  • @WouterVanRanst,很高兴为您提供帮助,感谢您提供的信息,祝您度过愉快的一天
猜你喜欢
  • 2011-04-14
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2013-12-09
相关资源
最近更新 更多