[C#][.NET Core] Azure Storage Blob 手把手從頭開始 - 列出檔案夾中的檔案夾們,檔案們

2019-02-01

上一篇文章,我們談到如何上傳圖片檔案,並且讀取該檔案的一些相關屬性檔案大小阿最後修改之類的資料,這一篇主要是要列出某檔案夾下的所有檔案列表,還有檔案夾列表

物換星移,似乎微軟要換成 v12 版本 了,  請參考新的文章 

列出所有檔案 -  列出 TEST2/TEST21/ 下的所有檔案

var connsctionString = "your_connection_string"; var cloudStorage = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(connsctionString); var cloudBlobClient = cloudStorage.CreateCloudBlobClient(); var cloudBlobContainer = cloudBlobClient.GetContainerReference("donmablogsample"); var resultCreateContainer = cloudBlobContainer.CreateIfNotExistsAsync().Result; Console.WriteLine("donmablogsample create already."); Microsoft.WindowsAzure.Storage.Blob.CloudBlobDirectory cloudBlobDirectory = cloudBlobContainer.GetDirectoryReference("TEST2/TEST21/"); var res = new List<string>(); //這種方法在 Azure Storge 包括 table 很常使用 Microsoft.WindowsAzure.Storage.Blob.BlobContinuationToken continuationToken = null; do { var listingResult = cloudBlobDirectory.ListBlobsSegmentedAsync(continuationToken).Result; continuationToken = listingResult.ContinuationToken; res.AddRange(listingResult.Results.Select(x => System.IO.Path.GetFileName(x.Uri.AbsolutePath)).ToList()); } while (continuationToken != null); Console.WriteLine("Result: " + string.Join("\r\n", res));

這邊沒有預期的溫馨,為何他們設計一個 function 就取得所有檔案名稱之類的,那是因為,而是感覺 一值跑迴圈跑到 continuationToken 不是 null  為止,那是因為其實因為你回傳的資料可能很多很多多到上百萬甚至上千萬,所以他是用批次像是分頁一樣的讀取方法來做到,如果有機會你在寫 Azure Storage Table 的時候,這操作非常常見

列出所有檔案夾 - 列出 TEST2/TEST21/ 下的所有檔案夾

var connsctionString = "your_connection_string"; var cloudStorage = Microsoft.WindowsAzure.Storage.CloudStorageAccount.Parse(connsctionString); var cloudBlobClient = cloudStorage.CreateCloudBlobClient(); var cloudBlobContainer = cloudBlobClient.GetContainerReference("donmablogsample"); var resultCreateContainer = cloudBlobContainer.CreateIfNotExistsAsync().Result; Console.WriteLine("donmablogsample create already."); Microsoft.WindowsAzure.Storage.Blob.CloudBlobDirectory cloudBlobDirectory = cloudBlobContainer.GetDirectoryReference("TEST2/TEST21/"); var res = new List<string>(); Microsoft.WindowsAzure.Storage.Blob.BlobContinuationToken continuationToken = null; do { var listingResult = cloudBlobDirectory.ListBlobsSegmentedAsync(continuationToken).Result; continuationToken = listingResult.ContinuationToken; res.AddRange(listingResult.Results.Where(x => x as Microsoft.WindowsAzure.Storage.Blob.CloudBlobDirectory != null).Select(x => x.Uri.Segments.Last()).ToList()); } while (continuationToken != null); Console.WriteLine("Result: " + string.Join("\r\n", res));




如果你覺得我寫得不好或是太簡單,請看下面的原文吧
reference:

https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview

https://docs.microsoft.com/en-us/dotnet/api/microsoft.windowsazure.storage.blob.cloudblobclient.listblobssegmentedasync?view=azure-dotnet#Microsoft_WindowsAzure_Storage_Blob_CloudBlobClient_ListBlobsSegmentedAsync_System_String_System_Boolean_Microsoft_WindowsAzure_Storage_Blob_BlobListingDetails_System_Nullable_System_Int32__Microsoft_WindowsAzure_Storage_Blob_BlobContinuationToken_Microsoft_WindowsAzure_Storage_Blob_BlobRequestOptions_Microsoft_WindowsAzure_Storage_OperationContext_System_Threading_CancellationToken_


當麻許的碎念筆記 2014 | Donma Hsu Design.