一,引言
上一篇將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會向我們提供兩個訪問密鑰,這樣,當重新生成其中一個時,可以使用另一個保持連接。
2,注入BlobServiceClient,BlobService
services.AddSingleton(x => new BlobServiceClient(Configuration.GetValue<string>("AzureBlobStorageConnectionString")));
初始化創(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ù),屬性等信息
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:傳播有關應取消操作的通知
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
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進行刪除
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)錯誤,歡迎批評指正。