Azure存储容器大小
如何在Azure存储中获取容器大小? 我通过C#API访问Azure存储:
var account = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStoragePrimary"]); var client = account.CreateCloudBlobClient(); var container = client.GetContainerReference("myContainer");
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureStoragePrimary"]); CloudBlobClient blobClient = account.CreateCloudBlobClient(); CloudBlobContainer blobContainer = blobClient.GetContainerReference("myContainer"); int fileSize = 0; foreach (var blobItem in blobContainer.ListBlobs()) { fileSize += blobItem.Properties.Length; }
fileSize
包含容器的大小,即包含的blob(文件)的总大小。
参考:CloudBlob: http : //msdn.microsoft.com/en-us/library/microsoft.windowsazure.storageclient.cloudblob_methods.aspx
我已将Windows Azure SDK中的Microsoft.WindowsAzure.StorageClient.dll 1.1.0.0更新为Windows Azure Storage NuGet包中的Microsoft.WindowsAzure.Storage.dll 2.0.0.0,现在可以正常使用。
long size = 0; var list = container.ListBlobs(); foreach (CloudBlockBlob blob in list) { size += blob.Properties.Length; }
一种可能更完整的方法。 关键的区别是listblobs()调用中的第二个参数,它强制执行一个平面列表:
public class StorageReport { public int FileCount { get; set; } public int DirectoryCount { get; set; } public long TotalBytes { get; set; } } //embdeded in some method StorageReport report = new StorageReport() { FileCount = 0, DirectoryCount = 0, TotalBytes = 0 }; foreach (IListBlobItem blobItem in container.ListBlobs(null, true, BlobListingDetails.None)) { if (blobItem is CloudBlockBlob) { CloudBlockBlob blob = blobItem as CloudBlockBlob; report.FileCount++; report.TotalBytes += blob.Properties.Length; } else if (blobItem is CloudPageBlob) { CloudPageBlob pageBlob = blobItem as CloudPageBlob; report.FileCount++; report.TotalBytes += pageBlob.Properties.Length; } else if (blobItem is CloudBlobDirectory) { CloudBlobDirectory directory = blobItem as CloudBlobDirectory; report.DirectoryCount++; } }
针对.NET Core 2, ListBlobs方法不可用,因为您只能访问异步方法。
因此,您可以使用ListBlobsSegmentedAsync方法获取Azure存储容器大小
BlobContinuationToken continuationToken = null; long totalBytes = 0; do { var response = await container.ListBlobsSegmentedAsync(continuationToken); continuationToken = response.ContinuationToken; totalBytes += response.Results.OfType().Sum(s => s.Properties.Length); } while (continuationToken != null);
- 是否可以在一个ASP.NET MVC应用程序中同时具有Azure AD和个人帐户身份validation?
- 将Application Insights与unit testing结合使用?
- 为什么上传到Azure blob这么慢?
- Azure移动应用程序 – 尝试POST时获取405(方法不允许)
- 从Azure blob存储中读取文件
- Windows Azure的http重定向的最佳实践
- 上传时从video中抓取缩略图。 (Azure Blob存储)
- Azure Fluent API创建SQL Server时出错 – 缺少x-ms-request-id标头
- Mongo DB对象Id使用JSON序列化程序进行反序列化