一,引言
上一篇將 Azure Blob 儲存的時候,有使用到一個 .NET Core Web 專案,通過程式碼的方式進行操作 Azure Blob 的資料,接著上一篇的內容,今天繼續看一下程式碼,具體看看 Azure.Storage 中的類,方法。
--------------------我是分割線--------------------
Azure Blob Storage 儲存系列:
2,Azure Storage 系列(二) .NET Core Web 專案中操作 Blob 儲存
二,正文
1,配置 Blob 連線字串
{ "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 會向我們提供兩個訪問金鑰,這樣,當重新生成其中一個時,可以使用另一個保持連線。
2,注入 BlobServiceClient,BlobService
BlobServiceClient
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
初始化 建立一個BlobService類,並且在將 appsettings 中的 key 叫 ”AzureBlobStorageConnection“ 的 連結字串的值當作引數放到建構函式中
BlobService
services.AddSingleton<IBlobSergvice, BlobService>();
3,BlobService 方法
3.1,獲取 Blog 資訊
#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
3.2,獲取 Blog 資訊
#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 的名稱新增到集合中。
3.3,根據檔案路徑和檔名稱上傳檔案
#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
3.4,上傳流
#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
3.5 刪除 Blob 資料
#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
版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。