Program.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using Azure.Storage.Blobs;
  2. using Azure.Storage.Blobs.Models;
  3. using Azure.Storage.Blobs.Specialized;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace BlobDownload
  11. {
  12. public class Program
  13. {
  14. static async Task Main(string[] args)
  15. {
  16. string StorageAccountConnectionString = "DefaultEndpointsProtocol=https;AccountName=teammodelstorage;AccountKey=Yq7D4dE6cFuer2d2UZIccTA/i0c3sJ/6ITc8tNOyW+K5f+/lWw9GCos3Mxhj47PyWQgDL8YbVD63B9XcGtrMxQ==;EndpointSuffix=core.chinacloudapi.cn";
  17. BlobServiceClient blobServiceClient = new BlobServiceClient(StorageAccountConnectionString);
  18. BlobContainerClient blobContainerClient = new BlobContainerClient(StorageAccountConnectionString, "hbcn");
  19. //BlobClient blob = blobContainerClient.GetBlobClient("res/PRD-20191015001/index.json");
  20. //await blob.DownloadToAsync(@"D:\VisualStudioProjects\TEAMModelOS\BlobDownload\download\index.json");
  21. string downloadpath = "F:/download";
  22. HashSet<string> pathset = new HashSet<string>();
  23. List<string> items = new List<string>();
  24. int count = 0;
  25. await foreach (BlobItem item in blobContainerClient.GetBlobsAsync(BlobTraits.None, BlobStates.None, "res/PRD-20191015002"))
  26. {
  27. string path = Path.Combine(downloadpath, item.Name);
  28. var paths= path.Split("/");
  29. StringBuilder stringBuilder = new StringBuilder();
  30. for (int i = 0; i < paths.Length-1; i++) {
  31. stringBuilder.Append($"{paths[i]}/");
  32. }
  33. pathset.Add(stringBuilder.ToString());
  34. count++;
  35. items.Add(item.Name);
  36. }
  37. foreach (var path in pathset) {
  38. if (!Directory.Exists(path)) {
  39. Directory.CreateDirectory(path);
  40. }
  41. }
  42. List<Task> tasks = new List<Task>();
  43. long start= DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  44. foreach (var item in items)
  45. {
  46. BlobClient blob = blobContainerClient.GetBlobClient(item);
  47. string path = Path.Combine(downloadpath, item);
  48. tasks.Add(blob.DownloadToAsync(path));
  49. }
  50. await Task.WhenAll(tasks);
  51. long end = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
  52. Console.WriteLine($"文件个数:{count};下载时间:{end-start}毫秒");
  53. }
  54. }
  55. }