【问题标题】:How to read all blobs from different path in one azure storage如何在一个 Azure 存储中从不同路径读取所有 blob
【发布时间】:2019-04-07 23:03:39
【问题描述】:

我遵循了有关 Azure IoT Hub 中路由的 Microsoft 教程,现在我来自 iot hub 的所有消息都存储在容器中的 blob 中。但是,每个 blob 都在单独的文件夹中。例如消息发送 2018 年 11 月 3 日 19:53 存储在 xyz/00/2018/11/03/19/53 blob 文件。如何从容器中的所有文件夹中获取所有 blob?我不能使用 CloudBlobContainer.ListBlobs() 因为我没有这个方法。我试过了:

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnectionString);
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer blobContainer = blobClient.GetContainerReference(storageContainerName);
        CloudBlob blob = blobContainer.GetBlockBlobReference("xyz/00/2018/11/03/20/15");
        MemoryStream stream = new MemoryStream();
        await blob.DownloadToStreamAsync(stream);
        return Encoding.UTF8.GetString(stream.ToArray());

并且此代码返回位于 xyz/00/2018/11/03/20/15 的 blob 内容 但是,如果我尝试使用下面的代码迭代 Blob,它只会返回“https://{storageName}.blob.core.windows.net/{containerName}/{xyz}/”

            List<string> blobs = new List<string>();
        BlobResultSegment resultSegment = blobContainer.ListBlobsSegmentedAsync(null).Result;
        foreach (IListBlobItem item in resultSegment.Results)
        {
            if (item.GetType() == typeof(CloudBlockBlob))
            {
                CloudBlockBlob blob = (CloudBlockBlob)item;
                blobs.Add(blob.Name);
            }
            else if (item.GetType() == typeof(CloudPageBlob))
            {
                CloudPageBlob blob = (CloudPageBlob)item;
                blobs.Add(blob.Name);
            }
            else if (item.GetType() == typeof(CloudBlobDirectory))
            {
                CloudBlobDirectory dir = (CloudBlobDirectory)item;
                blobs.Add(dir.Uri.ToString());
            }
        }

        var result = String.Join(", ", blobs.ToArray());
        return result;

我在这里缺少什么?如何从容器中获取每个 blob?

【问题讨论】:

    标签: c# .net azure azure-storage azure-blob-storage


    【解决方案1】:

    使用接受useFlatBlobListingListBlobsSegmentedAsync 的重载并将useFlatBlobListing 的值设置为true

    使用FlatBlobListing
    一个布尔值,指定是在平面列表中列出 Blob,还是按虚拟目录分层列出 Blob。

    (source)

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 2018-12-24
      • 2019-09-16
      • 2020-07-15
      • 2012-05-07
      • 1970-01-01
      • 2019-07-29
      • 2012-06-16
      相关资源
      最近更新 更多