Azure Storage container size

前端 未结 5 967
无人共我
无人共我 2020-12-11 01:42

How can I get a size of container in Azure Storage? I access Azure storage via C# API:

var account = CloudStorageAccount.Parse(ConfigurationManager.AppSettin         


        
5条回答
  •  南方客
    南方客 (楼主)
    2020-12-11 02:09

    With Azure.Storage.Blobs in version 12.6.0 it can be done in this way:

    static void Main(string[] args)
    {
    
        BlobServiceClient client = new BlobServiceClient(connectionString);
    
        GetContainersSize(client, connectionString, null, null).Wait();
    }
    
    //-------------------------------------------------
    // List containers
    //-------------------------------------------------
    async static Task> GetContainersSize(BlobServiceClient blobServiceClient,
                                    string connectionString,
                                    string prefix,
                                    int? segmentSize)
    {
        string continuationToken = string.Empty;
        var sizes = new ConcurrentDictionary();
        try
        {
    
            do
            {
                // Call the listing operation and enumerate the result segment.
                // When the continuation token is empty, the last segment has been returned
                // and execution can exit the loop.
                var resultSegment =
                    blobServiceClient.GetBlobContainersAsync(BlobContainerTraits.Metadata, prefix, default)
                    .AsPages(continuationToken, segmentSize);
                await foreach (Azure.Page containerPage in resultSegment)
                {
    
                    foreach (BlobContainerItem containerItem in containerPage.Values)
                    {
                        BlobContainerClient container = new BlobContainerClient(connectionString, containerItem.Name);
    
                        var blobs = container.GetBlobsAsync().AsPages(continuationToken);
    
                        await foreach(var blobPage in blobs)
                        {
                            var blobPageSize = blobPage.Values.Sum(b => b.Properties.ContentLength.GetValueOrDefault());
                            sizes.AddOrUpdate(containerItem.Name, blobPageSize, (key, currentSize) => currentSize + blobPageSize);
                        }
                    }
    
                    // Get the continuation token and loop until it is empty.
                    continuationToken = containerPage.ContinuationToken;
                }
    
            } while (continuationToken != string.Empty);
    
            return sizes;
        }
        catch (RequestFailedException e)
        {
            Console.WriteLine(e.Message);
            Console.ReadLine();
            throw;
        }
    }
    

提交回复
热议问题