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


一,引言

  上一篇將 Azure Blob 存儲的時候,有使用到一個 .NET  Core Web 項目,通過代碼的方式進行操作 Azure Blob 的數據,接着上一篇的內容,今天繼續看一下代碼,具體看看 Azure.Storage 中的類,方法。

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

Azure Blob Storage 存儲系列:

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

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

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

4,Azure Storage 系列(四)在.Net 上使用Table Storage

5,Azure Storage 系列(五)通過Azure.Cosmos.Table 類庫在.Net 上使用 Table Storage  

6,Azure Storage 系列(六)使用Azure Queue Storage

二,正文

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 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM