仅列出容器中的 blob/文件,而不列出目录、子目录、子文件

问题描述 投票:0回答:3

假设我的 Azure 存储帐户中有以下文件结构。

container-1
    directory-1
        file-1-1.csv
        file-1-2.json
        file-1-3.jpeg
    directory-2
        file-2-1.csv
    file-1.csv
    file-2.csv
container-2
    directory-1
        directory-1-1
            file1-1-1.csv

我只想列出container-1内的文件(file-1.csv、file-2.csv),而不列出任何其他结果是否有办法提出这样的请求。

目前我使用的网址是这样的:

https://${account}.blob.core.windows.net/container-1?comp=list&restype=container&prefix=/

返回:

directory-1
directory-1/file-1-1.csv
directory-1/file-1-2.json
directory-1/file-1-3.jpeg
directory-2
directory-2/file-2-1.csv
file-1.csv
file-2.csv

虽然我只需要:

file-1.csv
file-2.csv
azure azure-blob-storage azure-storage azure-data-lake blobstorage
3个回答
0
投票

无法使用 Blob 存储 REST API 仅列出 Blob。那里提供的服务器端过滤支持非常有限,仅列出 blob 并不是其中之一。

一种“hacky”方法是按前缀过滤 blob。假设容器级别的所有文件都以一些预定义的字符开头(例如

file
),并且该级别没有虚拟目录以这些字符开头,那么您可以指定
file
作为前缀,然后 REST API 将仅返回其名称以这些字符开头的 blob。


0
投票

您可以向 Azure Blob REST API 发出

List Blobs
请求。在该请求中,您可以在查询字符串中指定分隔符。使用分隔符
/

这将导致结果列出位于请求根目录中的所有 blob,以使用 XML

<Blob>
元素。不在搜索根目录中的所有 Blob 将显示在带有文件夹名称的
<BlobPrefix>
元素下。丢弃所有
<BlobPrefix>
元素,您将只剩下未包含在(另一个)“文件夹”中的 blob。


0
投票

您没有直接的方法来做到这一点。 我使用Python如下:

    blob_list = container_client.list_blobs()
    folder_path = "folder/path/"

    for blob in blob_list:
        is_folder = True if blob.content_settings["content_md5"] is None else False
        if not is_folder and blob.name.count('/') == folder_path.count('/'):
            print(blob.name)
© www.soinside.com 2019 - 2024. All rights reserved.