Azure Blob (三)引數設定說明

Grant_Allen發表於2020-09-07

一,引言

  上一篇將 Azure Blob 儲存的時候,有使用到一個 .NET  Core Web 專案,通過程式碼的方式進行操作 Azure Blob 的資料,接著上一篇的內容,今天繼續看一下程式碼,具體看看 Azure.Storage 中的類,方法。

--------------------我是分割線--------------------

Azure Blob Storage 儲存系列:

1,Azure Storage 系列(一)入門簡介

2,Azure Storage 系列(二) .NET Core Web 專案中操作 Blob 儲存

3,Azure 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 物件,在其建構函式中傳入返回值的 ContentContentType

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 呼叫 ContainerClientGetBlobsAsync“ 的方法,當前方法有多個預設引數

    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 

版權:轉載請在文章明顯位置註明作者及出處。如發現錯誤,歡迎批評指正。

 

相關文章