Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  《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
 

 

 

 

posted on 2012-01-19 22:24  Lei Zhang的博客  阅读(3731)  评论(3编辑  收藏  举报