上一篇將 Azure Blob 存儲的時候,有使用到一個 .NET Core Web 項目,經過代碼的方式進行操做 Azure Blob 的數據,接着上一篇的內容,今天繼續看一下代碼,具體看看 Azure.Storage 中的類,方法。html
--------------------我是分割線--------------------git
Azure Blob Storage 存儲系列:github
1,Azure Storage 系列(一)入門簡介windows
2,Azure Storage 系列(二) .NET Core Web 項目中操做 Blob 存儲api
3,Azure Storage 系列(三)Blob 參數設置說明安全
4,Azure Storage 系列(四)在.Net 上使用Table Storage app
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "AllowedHosts": "*", "AzureBlobStorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1JjONp+ta0DAXOO7ThK3diY891n9nycsTLGZF83nJpGVCVFhGOfV0wndOOQ==;EndpointSuffix=core.windows.net" }
」AzureBlobStorageConnectionString「 向此 Azure 存儲賬戶提出請求時,使用訪問密鑰對應用程序進行身份驗證。請採用安全的方式(例如使用 Azure Key Vault)保存訪問密鑰,不要共享密鑰。建議按期從新生成訪問密鑰。異步
Azure 會向咱們提供兩個訪問密鑰,這樣,當從新生成其中一個時,能夠使用另外一個保持鏈接。async
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
初始化 建立一個BlobService類,而且在將 appsettings 中的 key 叫 」AzureBlobStorageConnection「 的 連接字符串的值看成參數放到構造函數中函數
services.AddSingleton<IBlobSergvice, BlobService>();
#region 01,獲取Blob,根據blob名稱+async Task<BlobInfo> GetBlobAsync(string name) /// <summary> /// 獲取Blob,根據blob名稱 /// </summary> /// <param name="name">blob名稱</param> /// <returns></returns> public async Task<Azure.Storage.Models.BlobInfo> GetBlobAsync(string name) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(name); var blobDownLoadInfo = await blobClient.DownloadAsync(); return new Azure.Storage.Models.BlobInfo(blobDownLoadInfo.Value.Content, blobDownLoadInfo.Value.ContentType); } #endregion
獲取 Blob 存儲信息具體實現方法,
1,首先咱們能夠看到先經過 "picturecontainer" 名稱獲取到 ContainerClient,再經過須要的 Blob 名稱獲取到 BlobClient
2,其次,經過異步的方法 「DownloadAsync」 進行下載 Blob 對象,其中包括 Blob 元數據,屬性等信息
3,最後,咱們將返回建立 BlobInfo 對象,在其構造函數中傳入返回值的 Content 和 ContentType
#region 02,獲取全部Blob名稱+async Task<IEnumerable<string>> ListBlobsNameAsync() /// <summary> /// 獲取全部Blob名稱 /// </summary> /// <returns></returns> public async Task<IEnumerable<string>> ListBlobsNameAsync() { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var items = new List<string>(); await foreach (var blobItem in containerClient.GetBlobsAsync()) { items.Add(blobItem.Name); } return items; } #endregion
獲取 Blob 存儲信息具體實現方法,
1,首先咱們能夠看到先經過 "picturecontainer" 名稱獲取到 ContainerClient,再經過須要的 Blob 名稱獲取到 BlobClient
2,其次,經過異步 foreach 調用 ContainerClient 的 GetBlobsAsync「 的方法,當前方法有多個默認參數
BlobTraits(Blob特性):默認獲取包含全部特性的標識
BlobStates(Blob狀態):指定應包含全部狀態的Blob的標誌
prefix(前綴):指定一個字符串,該字符串對結果進行過濾以僅返回其名稱以指定的開頭的 Blob 前綴
cancellationToken:傳播有關應取消操做的通知
3,最後,將每一項的 Blob 的名稱添加到集合中。
#region 03,上傳文件,根據文件路徑和文件名稱+async Task UploadFileBlobAsync(string filePath, string filename) /// <summary> /// 上傳文件,根據文件路徑和文件名稱 /// </summary> /// <param name="filePath">文件路徑</param> /// <param name="filename">文件名稱</param> /// <returns></returns> public async Task UploadFileBlobAsync(string filePath, string filename) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(filename); await blobClient.UploadAsync(filePath, new BlobHttpHeaders { ContentType = filePath.GetContentType() }); } #endregion
上傳Blob數據具體實現方法
1,首先咱們能夠看到先經過 "picturecontainer" 名稱獲取到 ContainerClient,再經過須要的 Blob 名稱獲取到 BlobClient
2,最後經過異步上傳文件,此時須要指定文件的路徑,以及在 BlobHttpHeaders 中指定文件內容的 ContentType
#region 04,上傳文件流,根據文件內容和文件名稱+async Task UploadContentBlobAsync(string content, string filename) /// <summary> /// 上傳文件流,根據文件內容和文件名稱 /// </summary> /// <param name="content">文件內容</param> /// <param name="filename">文件名稱</param> /// <returns></returns> public async Task UploadContentBlobAsync(string content, string filename) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(filename); var bytes = Encoding.UTF8.GetBytes(content); await using var memoryStream = new MemoryStream(bytes); await blobClient.UploadAsync(memoryStream, new BlobHttpHeaders() { ContentType = filename.GetContentType() }); } #endregion
上傳Blob數據具體實現方法
1,首先咱們能夠看到先經過 "picturecontainer" 名稱獲取到 ContainerClient,再經過須要的 Blob 名稱獲取到 BlobClient
2,其次,將上傳的字符串轉化成字節流
3,最後經過異步字節流上傳,以及在 BlobHttpHeaders 中指定文件內容的 ContentType
#region 05,刪除Blob+async Task DeleteBlobAsync(string blobName) /// <summary> /// 刪除Blob /// </summary> /// <param name="blobName">blob名稱</param> /// <returns></returns> public async Task DeleteBlobAsync(string blobName) { var containerClient = _blobServiceClient.GetBlobContainerClient("picturecontainer"); var blobClient = containerClient.GetBlobClient(blobName); await blobClient.DeleteIfExistsAsync(); } #endregion
刪除blob 具體實現方法
1,首先咱們能夠看到先經過 "picturecontainer" 名稱獲取到 ContainerClient,再經過須要的 Blob 名稱獲取到 BlobClient
2,最後 調用異步 」DeleteIfExistsAsync「 方法,將 blob進行刪除
ok,具體針對於Blob 的增 刪 查 的方法就介紹完成
今天內容較少,只是把上一篇關於Blob操做的一些方法貼了出來,講了一下對於 Blob 的操做,你們也能夠經過微軟官方文檔:Azure Storage Blobs。下一篇將開始新的介紹 Storage 的新內容-----Azure Table Storage
github:https://github.com/yunqian44/Azure.Storage.git
做者:Allen
版權:轉載請在文章明顯位置註明做者及出處。如發現錯誤,歡迎批評指正。