Azure Storage 系列(二) .NET Core Web 項目中操作 Blob 存儲,azure ai配音Azure Storage 系列(二) .NET Core Web 項目中操作 Blob 存儲一,引言上一篇文章,我們介紹到在實際項目中系統(tǒng)會產(chǎn)生大量的日志文件,用戶上傳的頭像等等,同時也介紹到可以使用A......
一,引言
上一篇文章,我們介紹到在實際項目中系統(tǒng)會產(chǎn)生大量的日志文件,用戶上傳的頭像等等,同時也介紹到可以使用Azure Blob Storage來存儲項目中的一些日志文件,用戶頭像,用戶視頻等等。這個時候,有人就會問到,那我大概明白Blob可以存放什么類型的數(shù)據(jù)了,這個時候就有人問一些問題了
1,什么是Blob?
答Azure Blob存儲是非結構化的,它可以保存的數(shù)據(jù)類型是沒有任何限制的。如,pdf文檔,json文件,視頻,txt文件等。我們常見的類型的文件,它統(tǒng)統(tǒng)可以進行存儲。但是Blob不適合需要經(jīng)常查詢的結構化數(shù)據(jù),比如說項目中使用的,它們具有比內(nèi)存和本地磁盤更高的延遲,并且沒有可讓數(shù)據(jù)庫高效運行查詢的索引功能。但是,blob經(jīng)常用與數(shù)據(jù)庫一起用于存儲不可查詢的的數(shù)據(jù),例如用戶頭像存儲在Blob中,數(shù)據(jù)庫中保存對應用戶頭像的Blob名稱或URL(來自微軟官方解釋)
其實用可以這么說,如果項目中有對于的圖片資源,視頻資源,文件等資源,我們就可以考慮到將這些數(shù)據(jù)都存儲在Azure Blob中。今天在文章的后半段我們將通過一個簡單的.NET Core Web程序去操作Blob存儲對象。
我是分割線
Azure Blob Storage存儲系列:
1,Azure Storage系列(一)入門簡介
2,Azure Storage系列(二).NET Core Web項目中操作Blob存儲
3,Azure Storage系列(三)Blob參數(shù)設置說明
4,Azure Storage系列(四)在.Net上使用Table Storage
二,正文
開始之前我們看看Blob的類型
1,block blob(塊blob):由不同大小的塊構成,在寫入到塊blob時,需要將數(shù)據(jù)上傳到塊并將其提交到blob。
2,append blob(追加blob):是專用的塊blob,它僅支持追加新數(shù)據(jù),追加操作非常高效。追加blob非常適用于存儲日志或寫入流數(shù)據(jù)等方案。
3,page blob(頁blob):專用于涉及隨機存取讀寫的方案。頁blob用于存儲Azure虛擬機所使用的虛擬硬盤(VHD)文件,但它們非常適用于任何涉及到隨機存取的方案。
今天我們演示的是block blob類似,實際項目中,我們是如何進行操作的
1,Azure Portal上進行創(chuàng)建blob數(shù)據(jù)
找到之前創(chuàng)建好的“cnbateblogaccount”Storage Account,點擊圖中圈起來的“Containers”,進行創(chuàng)建容器
點擊“+Container”,進行創(chuàng)建容器
注意:這里的容器,我們可以理解為用來存儲對象的容器
Name:“picturecontainer”
Public access level選擇:“Private(no anonymous access)”(私有的,不允許匿名訪問)
點擊“Create
創(chuàng)建完成后,我們就可以在當前容器頁面看到自己創(chuàng)建的”picturecontainer“信息。
我們點擊容器進入,嘗試在上傳一張圖片進行測試
點擊“Select a file”進行選擇
選擇“background.jpg”,點擊打開
勾選“Overwrite if file already exist”(如果文件存儲,就覆蓋)
點擊“Upload”進行上傳
我們可以看到上傳的圖片文件,并且它的Blob類型是“block blob”
同時,我們可以還有在Portal上進行預覽,編輯操作。
ok,上述操作我們是在Azure Portal上進行操作的。接下來我們通過代碼進行blob的增刪查
2,通過ASP.NET Core Web項目進行Blob數(shù)據(jù)操作
vs2019新建Web項目
2.1,首先得安裝Azure.Storage相關的包
NuGet:Azure.Storage.Blobs
我們創(chuàng)建BlobExplorerController控制器
[HttpGet({BlobName})]
public async TaskIActionResult GetBlob(string blobName)
{
var data = await _blobService.GetBlobAsync(blobName);
return File(data.Content, data.ContentType);
}
2.2,創(chuàng)建IBlobService接口,和BlobService實現(xiàn)類,新增獲取Blob的接口定義和具體實現(xiàn)方法
TaskBlobInfoGetBlobAsync(stringname);#region 01,獲取Blob,根據(jù)blob名稱+async TaskBlobInfo GetBlobAsync(string name)
/// summary
/// 獲取Blob,根據(jù)blob名稱
/// /summary
/// param name=nameblob名稱/param
/// returns/returns
public async TaskAzure.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
創(chuàng)建BlobInfo返回實體信息
public class BlobInfo
{
public BlobInfo(Stream content, string contentType)
{
this.Content = content;
this.ContentType = contentType;
}
public Stream Content { get; set; }
public string ContentType { get; set; }
}
2.3配置鏈接字符串
Azure Portal中找到創(chuàng)建的“cnbateaccount”的Azure Blob Atorage,點擊“Setting=gt;Access key”
復制圖中的“Connection string”
將數(shù)據(jù)庫鏈接字符串配置在項目的appsettings配置文件中
{
Logging: {
LogLevel: {
Default: Information,
Microsoft: Warning,
Microsoft.Hosting.Lifetime: Information
}
},
AllowedHosts: *,
AzureBlobStorageConnectionString: DefaultEndpointsProtocol=https;AccountName=cnbateblogaccount;AccountKey=FU01h022mn1
JjONp+ta0DAXOO7ThK3dxxxxxxxxxxxxxxxxx891n9nycsTLGZF83nJpGvTIZvO5VCVxxxxxx0wndOOQ==;
EndpointSuffix=core.windows.net
}
2.4,注入BlobService,BlobServiceClient
services.AddSingleton(x=gt;new BlobServiceClient(Configuration.GetValuelt;string(AzureBlobStorageConnectionString)));
services.AddSingletonlt;IBlobSergvice,BlobServicegt;();
Ok,我們啟動項目進行測試
postman中輸入:localhost:9001/Blobs/background.jpg,效果如下圖所示:
瀏覽器訪問:http://localhost:9001/Blobs/background.jpg,效果如下圖所示:
ok,成功,成功獲取到之前在Portal上傳的圖片
2.5,完善對Blob數(shù)據(jù)的新增,刪除操作
BlobExplorerController完整代碼
BlobExplorerController
IBlobSergvice接口類
IBlobSergvice
BlobService實現(xiàn)類
BlobService
UpLoadContentRequest
UpLoadContentRequest
UploadFileRequest
UploadFileRequest
FileExtensions擴展類
FileExtensions
目前我們分別添加了上傳圖片接口,上傳文件接口,刪除文件接口
我們分別在postman中進行測試
(1)上傳圖片
FilePath(文件路徑):”C:\Users\admin\Desktop\2020904001.jpg“
FileName(文件名稱):”2020904001.jpg“
點擊”Send“,我們可以看到響應返回狀態(tài)碼(Status)”200 OK“
同時在Portal上也可以看到剛剛選擇的”20200904001.jpg“文件
這里注意一下,為什么我們制定文件的路徑,和名稱就可以上傳文件,并且可以在瀏覽器中查看,那是因為我們在上傳文件中設置文件的請求頭的原因
private static readonly FileExtensionContentTypeProvider provider = new FileExtensionContentTypeProvider();
public static string GetContentType(this string fileName)
{
if (!provider.TryGetContentType(fileName, out var contentType))
{
contentType = application/octetstream;
}
return contentType;
}
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() });
}
(2)上傳json文件
Content:{Name:zhangsan,Reamrk:This is work!!!}
FileName:”log.json“
點擊”Send“,上傳Json文件
我們繼續(xù)在Portal上進行查看上傳的json文件
(3)查看Blob信息
接下來還是刪除Blob數(shù)據(jù)的操作,我這里就不做演示了,大家可以自己調用接口進行測試
好的,那今天的內(nèi)容就先到此結束,今天的目的只是通過簡單的demo代碼去演示如果操作Azure Blob數(shù)據(jù),簡單的跑跑代碼,在.NET Core中的demo代碼是怎么去寫的,具體的Azure.Storage類中的方法,參數(shù)等今天的內(nèi)容暫時不去解釋。
鼓掌,撒花 ?????????
三,結尾
今天的文章大概介紹了在Portal上如何上傳blob圖片文件,以及寫了一個簡單的.NET Core demo程序,通過代碼我們我們?nèi)タ刂艬lob數(shù)據(jù)的增刪改查,下一篇繼續(xù)介紹Azure Storage在代碼中的操作,也著重講一下Azure.Storage中的類,以及方法的具體調用和說明。
github:https://github.com/yunqian44/Azure.Storage.git
作者:Allen
版權:轉載請在文章明顯位置注明作者及出處。如發(fā)現(xiàn)錯誤,歡迎批評指正。
作者:Allen版權:轉載請在文章明顯位置注明作者及出處。如發(fā)現(xiàn)錯誤,歡迎批評指正。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點,不代表ESG跨境電商觀點或立場。如有關于作品內(nèi)容、版權或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號密碼登錄
平臺顧問
微信掃一掃
馬上聯(lián)系在線顧問
小程序
ESG跨境小程序
手機入駐更便捷
返回頂部