【Azure】 檔案上傳至Azure Blob

.net MVC 檔案上傳至Azure Blob

公司幾乎都Azure化。

而我,以前沒玩過任何Azure,不過,其實好像又沒什麼太大差別,反正觀念就那樣。

 

以前檔案會放在網站路徑下或某個實體位置,今天我們來看看如何將檔案放在Azure的Blob上。

先看官方網站的說明:如何使用 .NET 的 Blob 儲存體

必須說,這份文件大概是我看過最快上手的文件了。

 

所以,這篇文章會記錄我自己的一些程式寫法。

 

先看看Blob的概念,一個帳號底下可以有多個Container(想像成資料夾),

一個Container可以有多個Blob(也就是檔案)。

 

再來要注意Container & Blob的命名方式(很重要),因為,只要命名規則錯誤,Azure一定回給你400錯誤。

   1: public class AzureBlob
   2: {
   3:     private readonly string storeageConnStr = ConfigurationManager.ConnectionStrings["storeageConnStr"].ConnectionString;
   4:  
   5:     private CloudBlobContainer GetContainer(string containerName)
   6:     {
   7:         if (string.IsNullOrWhiteSpace(containerName))
   8:             throw new ArgumentException("參數遺失");
   9:  
  10:         var account = CloudStorageAccount.Parse(this.storeageConnStr);
  11:  
  12:         var client = account.CreateCloudBlobClient();
  13:  
  14:         return client.GetContainerReference(containerName.ToLower());
  15:     }
  16:  
  17:     public void Download()
  18:     {
  19:         var blockBlob = GetBlockBlob("containerName", "fileName");
  20:  
  21:         using (var ms = new MemoryStream())
  22:         {
  23:             blockBlob.DownloadToStream(ms);
  24:         }
  25:     }
  26:  
  27:     public CloudBlockBlob GetBlockBlob(string containerName, string fileName)
  28:     {
  29:         var container = GetContainer(containerName);
  30:  
  31:         container.CreateIfNotExists();
  32:  
  33:         return container.GetBlockBlobReference(fileName);
  34:     }
  35:  
  36:     public async Task SaveBlobAsync(string containerName, string fileName, Stream fileStream)
  37:     {
  38:         /*
  39:             可以在之前先做檔案檢查,例如附檔名等...
  40:         */
  41:         var blockBlob = GetBlockBlob(containerName, fileName);
  42:  
  43:         await blockBlob.UploadFromStreamAsync(fileStream);
  44:     }
  45:  
  46:     public async Task DelBlob(string containerName, string fileName)
  47:     {
  48:         var blockBlob = GetBlockBlob(containerName, fileName);
  49:  
  50:         if (blockBlob.Exists())
  51:             await blockBlob.DeleteAsync();
  52:     }
  53: }

 

因為幾乎所有操作都需要取得CloudBlockBlob物件,所以,抽出來成一個Function。

 

檔案刪除部分,也是一樣先確認Blob存在,才進行刪除。否則,Azure會丟400錯誤。

 

就讓程式碼說明一切吧!!應該不難懂,有不懂的也歡迎大家提出。