uncategorized

Azure Storage Blob的使用

熟知Azure Storage的好用,但是,一直苦無實例需要用到此服務,所以,通常是觀看而已,今天剛好遇到有此需求,就來嘗試使用這服務。

在使用之前必須了解目前Azure儲存體現有的種類:

* Blob 儲存體 : 可儲存檔案資料。Blob 可以是任何類型的文字或二進位資料
 * 資料表儲存體 : 可儲存結構化的資料集。資料表儲存體屬於 NoSQL 索引鍵屬性資料儲存,可允許快速開發和迅速存取大量資料
 * 佇列儲存體針 : 對工作流程處理及雲端服務元件間的通訊。
 * 檔案儲存體: Azure 虛擬機器和雲端服務可以透過掛接的共用,在應用程式元件之間共用檔案資料

這邊先用Blob儲存體來存放網站相關的靜態檔案,這是最常被使用的種類。不過,用檔案儲存體在具有結構性的檔案分類,似乎又會比較好管理。

  1. 先建立一個儲存體

  2. 點選快速建立後,會要求輸入名稱,存放位置和設定複寫

    而複寫的選擇取決你的口袋深度,所以,建議評估實用性,若是,是屬於網頁中的靜態檔案,且後續又會開啟CDN服務,那麼是否需要用到高規格的複寫就見仁見智了

  3. 要使用的Blob儲存體之前須了解Blob本身結構,其結構如下:

我們可以在Container分別去建立相關的Blob,建議把放CSS檔案就放CSS資料夾,擺放產品相關就放置產品資料夾,這樣就可以開始上傳檔案了

開發上傳檔案程式


  1. 自行開發程式上傳檔案也是可以,必須先安裝Microsoft.WindowsAzure.Storage.dll,有了這元件之後,必須加入三個類別: Microsoft.WindowsAzure.Storage,Microsoft.WindowsAzure.Storage.Auth,Microsoft.WindowsAzure.Storage.Blob

  2. 設定連線到Storage連線字串

    1
    value="DefaultEndpointsProtocol=https;AccountName={username};AccountKey={Key}"

其餘相關關於連線字串設定可以參考
https://msdn.microsoft.com/library/azure/ee758697.aspx

設定好之後,就可以進行下面開發,只要三個步驟就可以將檔案上傳
A. 建立連線
B. 取得要上傳的Container名稱
C. 上傳檔案,並命名Blob名稱

下面案例是上傳多個檔案案例,用MVC方式來開發

View
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="configuration k-widget k-header">
<span class="infoHead">Information</span>
</div>
<form method="post" action='@Url.Action("Submit")' style="width:45%">
<div class="demo-section">
@(Html.Kendo().Upload()
.Name("files")
)
<p>
<input type="submit" value="Submit" class="k-button" />
</p>
</div>
</form>
Controller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public ActionResult Submit(IEnumerable<HttpPostedFileBase> files)
{
if (files != null)
{
GetFileInfo(files);
}
return View();
}
private void GetFileInfo(IEnumerable<HttpPostedFileBase> files)
{
string connection = "DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX"
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connection);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("css");
foreach (var s in files)
{
CloudBlockBlob blockBlob = container.GetBlockBlobReference(s.FileName);
blockBlob.UploadFromStream(s.InputStream);
}
}

就可以上傳檔案了,上傳完畢後,去查看Storage中的檔案,確實也上傳成功了,不過,上傳的時間似乎有一點問題,主要是因為時區的問題上面時區是以UTC為主的。