【问题标题】:Get folder name in Azure container获取 Azure 容器中的文件夹名称
【发布时间】:2021-10-28 13:57:11
【问题描述】:

在我的 Azure 存储帐户中,我有一个名为 "testcontainer" 的容器。在其中,有两个文件夹,分别名为 "DATA_FILE_A""DATA_FILE_B"。我想获取所有文件夹名称。 (即"DATA_FILE_A""DATA_FILE_B")。然后根据文件夹名称,我检查文件夹名称是否以"DATA_FILE_" 开头。如果是这样,那么我进入该文件夹并获取该文件夹的所有文件。我的问题是:

  1. 如何获取所有文件夹名称? (即"DATA_FILE_A" and "DATA_FILE_B"

  2. 如何获取指定文件夹的所有文件?

     CloudStorageAccount c = CloudStorageAccount.parse(connStr);
     CloudBlobClient blobClient = c.createCloudBlobClient();
     CloudBlobContainer container = blobClient.getContainerReference("testcontainer");
    
     Iterable<ListBlobItem> directoryList = container.listBlobs(); 
    

如果只有一个文件夹,我可以获取文件,但要获取所有文件夹,我会感到困惑。

CloudStorageAccount c = CloudStorageAccount.parse(connStr);
CloudBlobClient blobClient = c.createCloudBlobClient();
CloudBlobContainer container = blobClient.getContainerReference("testcontainer");
CloudBlobDirectory directory = container.getDirectoryReference("DATA_FILE_A");

Iterable<ListBlobItem> blobs = directory.listBlobs();

for (ListBlobItem item : blobs) {
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    CloudBlockBlob b = (CloudBlockBlob) item;
    b.download(output);
    //further processing
}

【问题讨论】:

    标签: java azure-blob-storage azure-storage-account


    【解决方案1】:

    Reference 开始,如果您调用 CloudBlobContainer.listBlobs() 方法,它将默认返回一个 BlobItems 列表,其中包含容器下的 blob 和目录。这是 v8 的默认行为。 可能不支持模式匹配,正如@Gaurav mantri 在reference 中提到的那样

    Azure Blob 中对服务器端搜索的支持有限 贮存。您唯一可以过滤的是 blob 前缀,即您可以 指示 Azure 存储服务仅返回其中的 blob 名称 从某些字符开始。但是如果你想得到基于文件 名称,下面的示例可能会给出一个想法,即;你可以试试

    var container = blobClient.GetContainerReference(containerName);
    Iterable<ListBlobItem> blobs = myCloudBlobContainer.listBlobs("Directory", true);
    

    或者

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

    例如:foreach(容器中的var文件.ListBlobs(前缀:“Data/File/”,useFlatBlobListing:true)) { …}

    请检查这些Ref 1Ref 2

    注意:

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

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2014-06-22
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2016-01-27
      • 1970-01-01
      相关资源
      最近更新 更多