【问题标题】:Find all blobs with prepend in Azure Blob Storage在 Azure Blob 存储中查找所有带有前缀的 Blob
【发布时间】:2020-05-21 13:15:30
【问题描述】:

我们使用 Azure 的 .NET Core SDK 进行 blob 存储来获取和更新静态 blob,并且我希望能够在特定目录中找到所有前缀为特定字符串的 blob。

我可以使用以下方式找到单个项目:

string fileName = "c999iconFile.png";

var blob = _myDirectory.GetBlobReference(fileName);

但我似乎无法找到所有blobs 前面带有c999 之类的东西的方法。

我们正在寻找与某个前置匹配的 blob 列表,然后对其进行批量删除。

蛮力解决方案是一个接一个地迭代并执行,但这似乎很浪费。

有没有办法做到这一点?

【问题讨论】:

  • 请注意,blob 存储中没有 filesdirectories 之类的东西。 Blob 只是命名字节(可能包含/ 字符)。但是,您可以在 azure 门户上看到目录树

标签: c# azure .net-core


【解决方案1】:

但我似乎无法找到一种方法来查找所有预先设置的 blob 像 c999 这样的东西。

您可以执行基于prefix 的搜索,其中存储服务会返回一个以特定前缀(在您的情况下为“c999”)开头的 blob 名称列表。

var blobs = blobContainerClient.GetBlobs(traits = Azure.Storage.Blobs.Models.BlobTraits.None, states = Azure.Storage.Blobs.Models.BlobStates.None, string prefix = "c999");

参考:BlobContainerClient.GetBlobs

以上代码适用于 SDK v12。如果您使用的是旧版本的库,请使用以下代码:

var blobs = blobContainer.ListBlobs(prefix = "c999", bool useFlatBlobListing = true);

参考:CloudBlobContainer.ListBlobs

【讨论】:

  • 我的客户端、存储帐户对象或任何引用的容器上似乎都没有方法 GetBlobs... 这似乎来自 .NET Framework SDK,而不是.NET CoreSDK。
  • 您使用的是什么版本的 SDK?这是最新版本(根据文档)。
  • WindowsAzure.Storage 版本 9.3.3 这是与 Azure.Storage 不同的命名空间。我在使用Service Buses 之前遇到过这个问题,他们的文档似乎只列出了Framework API,并将.NET Core API 埋在别处。你给的 ref 肯定是Framework,不过谢谢。
  • 更新了我的答案并包含了旧版 SDK 的代码。
猜你喜欢
  • 1970-01-01
  • 2019-07-28
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2021-08-31
  • 2015-08-22
  • 2013-07-05
相关资源
最近更新 更多