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

來源:Allen
作者:Allen
時間:2020-09-14
2572
上一篇將 Azure Blob 存儲的時候,有使用到一個 .NET Core Web 項目,通過代碼的方式進行操作 Azure Blob 的數(shù)據(jù),接著上一篇的內(nèi)容,今天繼續(xù)看一下代碼,具體看看 Azure.Storage 中的方法。

一,引言

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

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

Azure Blob Storage存儲系列:

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

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

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

4,Azure Storage系列(四)在.Net上使用Table 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會向我們提供兩個訪問密鑰,這樣,當重新生成其中一個時,可以使用另一個保持連接。

ia_10100000003.png

2,注入BlobServiceClient,BlobService

services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));

ia_10100000004.png

初始化創(chuàng)建一個BlobService類,并且在將appsettings中的key叫”AzureBlobStorageConnection“的鏈接字符串的值當作參數(shù)放到構造函數(shù)中

BlobService

services.AddSingleton<IBlobSergvice, BlobService>();

3,BlobService方法

3.1,獲取Blog信息

#region 01,獲取Blob,根據(jù)blob名稱+async Task<BlobInfo> GetBlobAsync(string name)

/// <summary>

/// 獲取Blob,根據(jù)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存儲信息具體實現(xiàn)方法,

1,首先我們可以看到先通過"picturecontainer"名稱獲取到ContainerClient,再通過需要的Blob名稱獲取到BlobClient

2,其次,通過異步的方法“DownloadAsync”進行下載Blob對象,其中包括Blob元數(shù)據(jù),屬性等信息

ia_10100000007.png

3,最后,我們將返回創(chuàng)建BlobInfo對象,在其構造函數(shù)中傳入返回值的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存儲信息具體實現(xiàn)方法,

1,首先我們可以看到先通過"picturecontainer"名稱獲取到ContainerClient,再通過需要的Blob名稱獲取到BlobClient

2,其次,通過異步foreach調用ContainerClient的GetBlobsAsync“的方法,當前方法有多個默認參數(shù)

BlobTraits(Blob特性):默認獲取包含所有特性的標識

BlobStates(Blob狀態(tài)):指定應包含所有狀態(tài)的Blob的標志

prefix(前綴):指定一個字符串,該字符串對結果進行過濾以僅返回其名稱以指定的開頭的Blob前綴

cancellationToken:傳播有關應取消操作的通知

ia_10100000010.png

3,最后,將每一項的Blob的名稱添加到集合中。

3.3,根據(jù)文件路徑和文件名稱上傳文件

#region 03,上傳文件,根據(jù)文件路徑和文件名稱+async Task UploadFileBlobAsync(string filePath, string filename)

/// <summary>

/// 上傳文件,根據(jù)文件路徑和文件名稱

/// </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數(shù)據(jù)具體實現(xiàn)方法

1,首先我們可以看到先通過"picturecontainer"名稱獲取到ContainerClient,再通過需要的Blob名稱獲取到BlobClient

2,最后通過異步上傳文件,此時需要指定文件的路徑,以及在BlobHttpHeaders中指定文件內(nèi)容的ContentType

3.4,上傳流

#region 04,上傳文件流,根據(jù)文件內(nèi)容和文件名稱+async Task UploadContentBlobAsync(string content, string filename)

/// <summary>

/// 上傳文件流,根據(jù)文件內(nèi)容和文件名稱

/// </summary>

/// <param name="content">文件內(nèi)容</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數(shù)據(jù)具體實現(xiàn)方法

1,首先我們可以看到先通過"picturecontainer"名稱獲取到ContainerClient,再通過需要的Blob名稱獲取到BlobClient

2,其次,將上傳的字符串轉化成字節(jié)流

3,最后通過異步字節(jié)流上傳,以及在BlobHttpHeaders中指定文件內(nèi)容的ContentType

ia_10100000015.png

3.5刪除Blob數(shù)據(jù)

#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具體實現(xiàn)方法

1,首先我們可以看到先通過"picturecontainer"名稱獲取到ContainerClient,再通過需要的Blob名稱獲取到BlobClient

2,最后調用異步”DeleteIfExistsAsync“方法,將blob進行刪除

ia_10100000018.png

ok,具體針對于Blob的增刪查的方法就介紹完成

三,結尾

今天內(nèi)容較少,只是把上一篇關于Blob操作的一些方法貼了出來,講了一下對于Blob的操作,大家也可以通過微軟官方文檔:Azure Storage Blobs。下一篇將開始新的介紹Storage的新內(nèi)容-----Azure Table Storage

github:https://github.com/yunqian44/Azure.Storage.git

作者:Allen

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

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

立即登錄,閱讀全文
原文鏈接:點擊前往 >
文章來源:Allen
版權說明:本文內(nèi)容來自于Allen,本站不擁有所有權,不承擔相關法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家