Azure Storage 系列(二) .NET Core Web 項(xiàng)目中操作 Blob 存儲(chǔ),azure blob stora-ESG跨境

Azure Storage 系列(二) .NET Core Web 項(xiàng)目中操作 Blob 存儲(chǔ),azure blob stora

來(lái)源網(wǎng)絡(luò)
來(lái)源網(wǎng)絡(luò)
2022-07-05
點(diǎn)贊icon 0
查看icon 809

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)生大量的日志文件,用戶上傳的頭......

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í)也介紹到可以使用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)指正。


文章推薦
Azure Kubernetes 服務(wù)的工作原理,kubernetes 云原生微服務(wù)
Amazon萬(wàn)圣節(jié)爆款產(chǎn)品開(kāi)始爆發(fā),amazon萬(wàn)圣節(jié)
從德國(guó)采購(gòu)好的二手真空鍍膜機(jī),二手多弧真空鍍膜機(jī)
代理進(jìn)口日本舊設(shè)備報(bào)關(guān),日本舊機(jī)電設(shè)備進(jìn)口報(bào)關(guān)辦理手續(xù)


特別聲明:以上文章內(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)系。

搜索 放大鏡
韓國(guó)平臺(tái)交流群
加入
韓國(guó)平臺(tái)交流群
掃碼進(jìn)群
歐洲多平臺(tái)交流群
加入
歐洲多平臺(tái)交流群
掃碼進(jìn)群
美國(guó)賣(mài)家交流群
加入
美國(guó)賣(mài)家交流群
掃碼進(jìn)群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
亞馬遜跨境增長(zhǎng)交流群
加入
亞馬遜跨境增長(zhǎng)交流群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
ESG獨(dú)家招商-PHH GROUP賣(mài)家交流群
加入
ESG獨(dú)家招商-PHH GROUP賣(mài)家交流群
掃碼進(jìn)群
《TikTok官方運(yùn)營(yíng)干貨合集》
《TikTok綜合運(yùn)營(yíng)手冊(cè)》
《TikTok短視頻運(yùn)營(yíng)手冊(cè)》
《TikTok直播運(yùn)營(yíng)手冊(cè)》
《TikTok全球趨勢(shì)報(bào)告》
《韓國(guó)節(jié)日營(yíng)銷指南》
《開(kāi)店大全-全球合集》
《開(kāi)店大全-主流平臺(tái)篇》
《開(kāi)店大全-東南亞篇》
《CD平臺(tái)自注冊(cè)指南》
通過(guò)ESG入駐平臺(tái),您將解鎖
綠色通道,更高的入駐成功率
專業(yè)1v1客戶經(jīng)理服務(wù)
運(yùn)營(yíng)實(shí)操指導(dǎo)
運(yùn)營(yíng)提效資源福利
平臺(tái)官方專屬優(yōu)惠

立即登記,定期獲得更多資訊

訂閱
聯(lián)系顧問(wèn)

平臺(tái)顧問(wèn)

平臺(tái)顧問(wèn) 平臺(tái)顧問(wèn)

微信掃一掃
馬上聯(lián)系在線顧問(wèn)

icon icon

小程序

微信小程序

ESG跨境小程序
手機(jī)入駐更便捷

icon icon

返回頂部

【免費(fèi)領(lǐng)取】全球跨境電商運(yùn)營(yíng)干貨 關(guān)閉
進(jìn)行中
進(jìn)行中
TikTok運(yùn)營(yíng)必備干貨包
包含8個(gè)TikTok最新運(yùn)營(yíng)指南(市場(chǎng)趨勢(shì)、運(yùn)營(yíng)手冊(cè)、節(jié)日攻略等),官方出品,專業(yè)全面!
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
韓國(guó)電商節(jié)日營(yíng)銷指南
10+韓國(guó)電商重要營(yíng)銷節(jié)點(diǎn)詳細(xì)解讀;2024各節(jié)日熱度選品助力引爆訂單增長(zhǎng);8大節(jié)日營(yíng)銷技巧輕松撬動(dòng)大促流量密碼。
免費(fèi)領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——全球合集
涵括全球100+個(gè)電商平臺(tái)的核心信息,包括平臺(tái)精煉簡(jiǎn)介、競(jìng)爭(zhēng)優(yōu)勢(shì)、熱銷品類、入駐要求以及入駐須知等關(guān)鍵內(nèi)容。
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——主流平臺(tái)篇
火爆全球的跨境電商平臺(tái)合集,平臺(tái)優(yōu)勢(shì)、開(kāi)店選品、入駐條件盡在掌握
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——拉美篇
涵蓋9大熱門(mén)拉美電商平臺(tái),成熟的市場(chǎng)是跨境賣(mài)家的熱門(mén)選擇!
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——日韓篇
涵蓋10+日韓電商平臺(tái),入駐條件一看就懂,優(yōu)勢(shì)熱銷品應(yīng)有盡有
立即領(lǐng)取
進(jìn)行中
進(jìn)行中
全球平臺(tái)詳解——?dú)W洲篇
涵蓋20+歐洲電商平臺(tái),詳細(xì)解讀優(yōu)勢(shì)、入駐條件、熱銷品等
立即領(lǐng)取