首页 > 解决方案 > 从 azure 存储中获取 blob,不包括子文件夹

问题描述

尝试使用 CloudBlobContainer.ListBlobs 从 Azure 存储容器中获取 blob,但我只想从特定文件夹(使用前缀)而不是主文件夹下的子文件夹中获取 blob。

例如,假设我有这个:

Folder
  Sub-Folder
    image2.jpg
  image1.jpg

如果我使用文件夹作为前缀,我想获取 image1.jpg 并排除 image2.jpg(子文件夹下的任何内容)

标签: azure-storageazure-blob-storageazure-storage-files

解决方案


参考

如果调用 CloudBlobContainer.listBlobs() 方法,默认情况下会返回一个 BlobItems 列表,其中包含容器下的 Blob 和目录。这是 v8 的默认行为。

即使您想匹配模式,正如@Gaurav mantri- reference所述

Azure Blob 存储中对服务器端搜索的支持有限。您唯一可以过滤的是 blob 前缀,即您可以指示 Azure 存储服务仅返回以某些字符开头的 blob 名称。

但是如果你想基于文件名获取,下面的例子可能会给出一个想法

var container = blobClient.GetContainerReference(containerName);
foreach (var file in container.ListBlobs(prefix: " Folder/filename.xml", useFlatBlobListing: true))
{ …}

在您的情况下,请尝试使用 Folder/filename.jpg。

笔记:

  1. useFlatBlobListing:将此值设置为 true 将确保只返回 blob(包括在该目录内的任何子文件夹内)而不是目录和 blob。
  2. 因此,如果您只需要 blob,则必须将 UseFlatBlobListing 属性选项设置为 true。

其他参考文献: 参考文献 1参考文献 2


推荐阅读