为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 ListBlobsSegmentedAsync 从 Azure BLOB

如何使用 ListBlobsSegmentedAsync 从 Azure BLOB

C#
翻阅古今 2021-11-28 19:41:57
在尝试访问 Azure blob 文件夹的所有文件时,获取示例代码container.ListBlobs();但它看起来像旧的。旧代码: container.ListBlobs();新代码尝试: container.ListBlobsSegmentedAsync(continuationToken);我正在尝试使用以下代码:container.ListBlobsSegmentedAsync(continuationToken);文件夹是这样的:Container/F1/file.jsonContainer/F1/F2/file.jsonContainer/F2/file.json寻找更新版本以从 Azure 文件夹中获取所有文件。任何示例代码都会有所帮助,谢谢!
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

这是答案的代码:


private async Task<List<IListBlobItem>> ListBlobsAsync(CloudBlobContainer container)

{

    BlobContinuationToken continuationToken = null;

    List<IListBlobItem> results = new List<IListBlobItem>();

    do

    {

       bool useFlatBlobListing = true;

       BlobListingDetails blobListingDetails = BlobListingDetails.None;

       int maxBlobsPerRequest = 500;

       var response = await container.ListBlobsSegmentedAsync(BOAppSettings.ConfigServiceEnvironment, useFlatBlobListing, blobListingDetails, maxBlobsPerRequest, continuationToken, null, null);

            continuationToken = response.ContinuationToken;

            results.AddRange(response.Results);

        }

     while (continuationToken != null);

     return results;

}

然后你可以返回如下值:


IEnumerable<IListBlobItem> listBlobs = await this.ListBlobsAsync(container);

foreach(CloudBlockBlob cloudBlockBlob in listBlobs)

  {

     BOBlobFilesViewModel boBlobFilesViewModel = new BOBlobFilesViewModel

     {

          CacheKey = cloudBlockBlob.Name,

          Name = cloudBlockBlob.Name

      };

      listBOBlobFilesViewModel.Add(boBlobFilesViewModel);

   }

//return listBOBlobFilesViewModel;


查看完整回答
反对 回复 2021-11-28
?
青春有我

TA贡献1784条经验 获得超8个赞

C#代码:


   //connection string

    string storageAccount_connectionString = "**NOTE: CONNECTION STRING**";


    // Retrieve storage account from connection string.

    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageAccount_connectionString);


    // Create the blob client.

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();


    // Retrieve reference to a previously created container.

    CloudBlobContainer container = blobClient.GetContainerReference("**NOTE:NAME OF CONTAINER**");

    //The specified container does not exist


    try

    {

        //root directory

        CloudBlobDirectory dira = container.GetDirectoryReference(string.Empty);

        //true for all sub directories else false 

        var rootDirFolders = dira.ListBlobsSegmentedAsync(true, BlobListingDetails.Metadata, null, null, null, null).Result;


        foreach (var blob in rootDirFolders.Results)

        {

             Console.WriteLine("Blob", blob);

        }


    }

    catch (Exception e)

    {

        //  Block of code to handle errors

        Console.WriteLine("Error", e);


    }


查看完整回答
反对 回复 2021-11-28
?
守着一只汪

TA贡献1872条经验 获得超3个赞

该方法CloudBlobClient.ListBlobsSegmentedAsync用于返回包含容器中 blob 项集合的结果段。


要列出所有 blob,我们可以使用ListBlobs方法,


这是一个演示供您参考:


    public static List<V> ListAllBlobs<T, V>(Expression<Func<T, V>> expression, string containerName,string prefix)

    {

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse("YourConnectionString;");


        CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();


        CloudBlobContainer container = cloudBlobClient.GetContainerReference(containerName);

        container.CreateIfNotExists();


        var list = container.ListBlobs(prefix: prefix,useFlatBlobListing: true);


        List<V> data = list.OfType<T>().Select(expression.Compile()).ToList();

        return data;

    }

用法和截图:


列出一个文件夹下的所有 blob 名称:

//img1.sycdn.imooc.com//61a36b32000161bb07980128.jpg

列出一个文件夹下所有 blob 的 URL:

//img1.sycdn.imooc.com//61a36b3d0001f4ea08510150.jpg


查看完整回答
反对 回复 2021-11-28
  • 3 回答
  • 0 关注
  • 279 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信