Azure Storage 系列(三)Blob 參數設置說明

一,引言

  上一篇將 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

二,正文

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 會向咱們提供兩個訪問密鑰,這樣,當從新生成其中一個時,能夠使用另外一個保持鏈接。async

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 

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

相關文章
相關標籤/搜索