zoukankan      html  css  js  c++  java
  • 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
     

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/threestone/p/2327651.html
Copyright © 2011-2022 走看看