《Windows Azure Platform 系列文章目錄》
如果讀者使用的是國內由世紀互聯運維的Azure China服務,請參考筆者的博文Azure China (4) 管理Azure China Storage Account
如果需要參考Azure China使用SAS Token的Sample Code,請參考筆者的博文:Azure China (10) 使用Azure China SAS Token
本章我們會介紹如何在本地模擬器使用Blob Storage存儲圖片。
關於Blob Storage的概念,請參考 Windows Azure Platform (七) Windows Azure Storage Service存儲服務 。
在開始介紹之前,請確保您已經下載了最新的Windows Azure開發工具,我使用的是1.6版本。本次介紹使用Visual Studio 2010作為開發工具。
Azure Container屬性有三種
- Private:不允許匿名用戶讀取該容器中的Blob;
- Public Container:匿名用戶可以讀取該Container,並且可以列出Container所有Blob內容;
- Blob:匿名用戶只能讀取Blob,即只能根據Blob的URL來讀取Blob,無法列出Container下所有的Blob。
1.新建Azure Project
以管理員身份運行Visual Studio 2010,並新建一個Windows Azure Project,我命名為AzureBlobStorage
然后選擇WebRole-->右鍵-->屬性

在Settings頁面,Add Setting,類型選擇Connection String,並且按最右邊的"..."按鈕

選擇"Use the Windows Azure storage emulator",然后選擇"OK"

然后添加另外一個Setting(設置),叫做ContainerName並且把它的Type改成"String",值設置成gallery

注意:
Container和Blob的命名規則!
2.打開Default.aspx.cs
添加引用命名空間
using Microsoft.WindowsAzure.StorageClient;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.ServiceRuntime;
using System.Collections.Specialized;
using Microsoft.WindowsAzure.StorageClient.Protocol;
前端的ASPX添加如下控件:

然后添加代碼內容:
namespace MyWebRole { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.EnsureContainerExists(); } } private void EnsureContainerExists() { var container = GetContainer(); // 檢查container是否被創建,如果沒有,創建container container.CreateIfNotExist(); var permissions = container.GetPermissions(); //對Storage的訪問權限是可以瀏覽Container permissions.PublicAccess = BlobContainerPublicAccessType.Container; container.SetPermissions(permissions); } private CloudBlobContainer GetContainer() { //獲取ServiceConfiguration.cscfg配置文件的信息 var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); var client = account.CreateCloudBlobClient(); //獲得BlobContainer對象 return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName")); } protected void upload_Click(object sender, EventArgs e) { if (imageFile.HasFile) { //輸出圖片文件的信息 status.Text = "Inserted [" + imageFile.FileName + "] - Content Type [" + imageFile.PostedFile.ContentType + "] - Length [" + imageFile.PostedFile.ContentLength + "]"; this.SaveImage(imageFile.FileName,imageFile.PostedFile.ContentType,imageFile.FileBytes); } else status.Text = "No image file"; } private void SaveImage(string fileName, string contentType, byte[] data) { //獲得BlobContainer對象並把文件上傳到這個Container var blob = this.GetContainer().GetBlobReference(fileName); blob.Properties.ContentType = contentType; // 創建元數據信息 var metadata = new NameValueCollection(); metadata["Name"] = fileName; // 上傳圖片 blob.Metadata.Add(metadata); blob.UploadByteArray(data); } //發現Azure Storage升級到2.0后API變了 private void SaveImage(string fileName, string contentType, byte[] data) { //獲得BlobContainer對象並把文件上傳到這個Container var blob = this.GetContainer().GetBlockBlobReference(fileName); blob.Properties.ContentType = contentType; using (var ms = new MemoryStream(data, false)) { blob.UploadFromStream(ms); } } }
3.打開Global.asax.cs文件,添加如下代碼
void Application_Start(object sender, EventArgs e)
{
// This code sets up a handler to update CloudStorageAccount instances when their corresponding
// configuration settings change in the service configuration file.
CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) =>
{
// Provide the configSetter with the initial value
configSetter(RoleEnvironment.GetConfigurationSettingValue(configName));
});
}
4.運行應用程序,使用FileUpload查找本地圖片,然后點擊"Upload Image",圖片就能上傳到本地Storage Emulator的Blob里了。

6.打開Visual Studio,展開左側的Server Explorer列表,依次展開Windows Azure Storage-->Development-->Blob-->gallery

其中Developement表示我使用的是本地的模擬器
gallery就是我前面設置的Blob Container
我們選中Azure.jpg,右鍵屬性,可以看使用Storage Emluator后在本地的URL

我們可以通過打開本地的瀏覽器來查看。
5.下載我的工程文件:AzureBlobStorage.rar
