using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Azure.Storage.Blobs.Specialized; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace BlobDownload { public class Program { static async Task Main(string[] args) { string StorageAccountConnectionString = "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn"; BlobServiceClient blobServiceClient = new BlobServiceClient(StorageAccountConnectionString); BlobContainerClient blobContainerClient = new BlobContainerClient(StorageAccountConnectionString, "hbcn"); //BlobClient blob = blobContainerClient.GetBlobClient("res/PRD-20191015001/index.json"); //await blob.DownloadToAsync(@"D:\VisualStudioProjects\TEAMModelOS\BlobDownload\download\index.json"); string downloadpath = "F:/download"; HashSet pathset = new HashSet(); List items = new List(); int count = 0; await foreach (BlobItem item in blobContainerClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, "res/PRD-20191015002")) { string path = Path.Combine(downloadpath, item.Name); var paths= path.Split("/"); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < paths.Length-1; i++) { stringBuilder.Append($"{paths[i]}/"); } pathset.Add(stringBuilder.ToString()); count++; items.Add(item.Name); } foreach (var path in pathset) { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } } List tasks = new List(); long start= DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); foreach (var item in items) { BlobClient blob = blobContainerClient.GetBlobClient(item); string path = Path.Combine(downloadpath, item); tasks.Add(blob.DownloadToAsync(path)); } await Task.WhenAll(tasks); long end = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); Console.WriteLine($"文件个数:{count};下载时间:{end-start}毫秒"); } } }