Azure Storage 系列(二) .NET Core Web 項(xiàng)目中操作 Blob 存儲(chǔ),azure blob storage 數(shù)據(jù)怎么保存Azure Storage 系列(二) .NET Core Web 項(xiàng)目中操作 Blob 存儲(chǔ)一,引言上一篇文章,我們介紹到在實(shí)際項(xiàng)目中系統(tǒng)會(huì)產(chǎn)生大量的日志文件,用戶上傳的頭......
一,引言
上一篇文章,我們介紹到在實(shí)際項(xiàng)目中系統(tǒng)會(huì)產(chǎn)生大量的日志文件,用戶上傳的頭像等等,同時(shí)也介紹到可以使用Azure Blob Storage來(lái)存儲(chǔ)項(xiàng)目中的一些日志文件,用戶頭像,用戶視頻等等。這個(gè)時(shí)候,有人就會(huì)問(wèn)到,那我大概明白Blob可以存放什么類型的數(shù)據(jù)了,這個(gè)時(shí)候就有人問(wèn)一些問(wèn)題了
1,什么是Blob?
答Azure Blob存儲(chǔ)是非結(jié)構(gòu)化的,它可以保存的數(shù)據(jù)類型是沒(méi)有任何限制的。如,pdf文檔,json文件,視頻,txt文件等。我們常見(jiàn)的類型的文件,它統(tǒng)統(tǒng)可以進(jìn)行存儲(chǔ)。但是Blob不適合需要經(jīng)常查詢的結(jié)構(gòu)化數(shù)據(jù),比如說(shuō)項(xiàng)目中使用的,它們具有比內(nèi)存和本地磁盤(pán)更高的延遲,并且沒(méi)有可讓數(shù)據(jù)庫(kù)高效運(yùn)行查詢的索引功能。但是,blob經(jīng)常用與數(shù)據(jù)庫(kù)一起用于存儲(chǔ)不可查詢的的數(shù)據(jù),例如用戶頭像存儲(chǔ)在Blob中,數(shù)據(jù)庫(kù)中保存對(duì)應(yīng)用戶頭像的Blob名稱或URL(來(lái)自微軟官方解釋)
其實(shí)用可以這么說(shuō),如果項(xiàng)目中有對(duì)于的圖片資源,視頻資源,文件等資源,我們就可以考慮到將這些數(shù)據(jù)都存儲(chǔ)在Azure Blob中。今天在文章的后半段我們將通過(guò)一個(gè)簡(jiǎn)單的.NET Core Web程序去操作Blob存儲(chǔ)對(duì)象。
我是分割線
Azure Blob Storage存儲(chǔ)系列:
1,Azure Storage系列(一)入門(mén)簡(jiǎn)介
2,Azure Storage系列(二).NET Core Web項(xiàng)目中操作Blob存儲(chǔ)
3,Azure Storage系列(三)Blob參數(shù)設(shè)置說(shuō)明
4,Azure Storage系列(四)在.Net上使用Table Storage
二,正文
開(kāi)始之前我們看看Blob的類型
1,block blob(塊blob):由不同大小的塊構(gòu)成,在寫(xiě)入到塊blob時(shí),需要將數(shù)據(jù)上傳到塊并將其提交到blob。
2,append blob(追加blob):是專用的塊blob,它僅支持追加新數(shù)據(jù),追加操作非常高效。追加blob非常適用于存儲(chǔ)日志或?qū)懭肓鲾?shù)據(jù)等方案。
3,page blob(頁(yè)blob):專用于涉及隨機(jī)存取讀寫(xiě)的方案。頁(yè)blob用于存儲(chǔ)Azure虛擬機(jī)所使用的虛擬硬盤(pán)(VHD)文件,但它們非常適用于任何涉及到隨機(jī)存取的方案。
今天我們演示的是block blob類似,實(shí)際項(xiàng)目中,我們是如何進(jìn)行操作的
1,Azure Portal上進(jìn)行創(chuàng)建blob數(shù)據(jù)
找到之前創(chuàng)建好的“cnbateblogaccount”Storage Account,點(diǎn)擊圖中圈起來(lái)的“Containers”,進(jìn)行創(chuàng)建容器
點(diǎn)擊“+Container”,進(jìn)行創(chuàng)建容器
注意:這里的容器,我們可以理解為用來(lái)存儲(chǔ)對(duì)象的容器
Name:“picturecontainer”
Public access level選擇:“Private(no anonymous access)”(私有的,不允許匿名訪問(wèn))
點(diǎn)擊“Create
創(chuàng)建完成后,我們就可以在當(dāng)前容器頁(yè)面看到自己創(chuàng)建的”picturecontainer“信息。
我們點(diǎn)擊容器進(jìn)入,嘗試在上傳一張圖片進(jìn)行測(cè)試
點(diǎn)擊“Select a file”進(jìn)行選擇
選擇“background.jpg”,點(diǎn)擊打開(kāi)
勾選“Overwrite if file already exist”(如果文件存儲(chǔ),就覆蓋)
點(diǎn)擊“Upload”進(jìn)行上傳
我們可以看到上傳的圖片文件,并且它的Blob類型是“block blob”
同時(shí),我們可以還有在Portal上進(jìn)行預(yù)覽,編輯操作。
ok,上述操作我們是在Azure Portal上進(jìn)行操作的。接下來(lái)我們通過(guò)代碼進(jìn)行blob的增刪查
2,通過(guò)ASP.NET Core Web項(xiàng)目進(jìn)行Blob數(shù)據(jù)操作
vs2019新建Web項(xiàng)目
2.1,首先得安裝Azure.Storage相關(guān)的包
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實(shí)現(xiàn)類,新增獲取Blob的接口定義和具體實(shí)現(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返回實(shí)體信息
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,點(diǎn)擊“Setting=gt;Access key”
復(fù)制圖中的“Connection string”
將數(shù)據(jù)庫(kù)鏈接字符串配置在項(xiàng)目的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,我們啟動(dòng)項(xiàng)目進(jìn)行測(cè)試
postman中輸入:localhost:9001/Blobs/background.jpg,效果如下圖所示:
瀏覽器訪問(wèn):http://localhost:9001/Blobs/background.jpg,效果如下圖所示:
ok,成功,成功獲取到之前在Portal上傳的圖片
2.5,完善對(duì)Blob數(shù)據(jù)的新增,刪除操作
BlobExplorerController完整代碼
BlobExplorerController
IBlobSergvice接口類
IBlobSergvice
BlobService實(shí)現(xiàn)類
BlobService
UpLoadContentRequest
UpLoadContentRequest
UploadFileRequest
UploadFileRequest
FileExtensions擴(kuò)展類
FileExtensions
目前我們分別添加了上傳圖片接口,上傳文件接口,刪除文件接口
我們分別在postman中進(jìn)行測(cè)試
(1)上傳圖片
FilePath(文件路徑):”C:\Users\admin\Desktop\2020904001.jpg“
FileName(文件名稱):”2020904001.jpg“
點(diǎn)擊”Send“,我們可以看到響應(yīng)返回狀態(tài)碼(Status)”200 OK“
同時(shí)在Portal上也可以看到剛剛選擇的”20200904001.jpg“文件
這里注意一下,為什么我們制定文件的路徑,和名稱就可以上傳文件,并且可以在瀏覽器中查看,那是因?yàn)槲覀冊(cè)谏蟼魑募性O(shè)置文件的請(qǐng)求頭的原因
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“
點(diǎn)擊”Send“,上傳Json文件
我們繼續(xù)在Portal上進(jìn)行查看上傳的json文件
(3)查看Blob信息
接下來(lái)還是刪除Blob數(shù)據(jù)的操作,我這里就不做演示了,大家可以自己調(diào)用接口進(jìn)行測(cè)試
好的,那今天的內(nèi)容就先到此結(jié)束,今天的目的只是通過(guò)簡(jiǎn)單的demo代碼去演示如果操作Azure Blob數(shù)據(jù),簡(jiǎn)單的跑跑代碼,在.NET Core中的demo代碼是怎么去寫(xiě)的,具體的Azure.Storage類中的方法,參數(shù)等今天的內(nèi)容暫時(shí)不去解釋。
鼓掌,撒花 ?????????
三,結(jié)尾
今天的文章大概介紹了在Portal上如何上傳blob圖片文件,以及寫(xiě)了一個(gè)簡(jiǎn)單的.NET Core demo程序,通過(guò)代碼我們我們?nèi)タ刂艬lob數(shù)據(jù)的增刪改查,下一篇繼續(xù)介紹Azure Storage在代碼中的操作,也著重講一下Azure.Storage中的類,以及方法的具體調(diào)用和說(shuō)明。
github:https://github.com/yunqian44/Azure.Storage.git
作者:Allen
版權(quán):轉(zhuǎn)載請(qǐng)?jiān)谖恼旅黠@位置注明作者及出處。如發(fā)現(xiàn)錯(cuò)誤,歡迎批評(píng)指正。
作者:Allen版權(quán):轉(zhuǎn)載請(qǐng)?jiān)谖恼旅黠@位置注明作者及出處。如發(fā)現(xiàn)錯(cuò)誤,歡迎批評(píng)指正。
特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場(chǎng)。如有關(guān)于作品內(nèi)容、版權(quán)或其它問(wèn)題請(qǐng)于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。
二維碼加載中...
使用微信掃一掃登錄
使用賬號(hào)密碼登錄
平臺(tái)顧問(wèn)
微信掃一掃
馬上聯(lián)系在線顧問(wèn)
小程序
ESG跨境小程序
手機(jī)入駐更便捷
返回頂部