Windows Azure Storage (2) Windows Azure Storage Service存儲服務之Blob詳解(上)


  《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
 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM