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
     

  • 相关阅读:
    Mac 终端命令使用自动补全时忽略大小写设置
    Android App专项测试
    评估产品机会
    如何快速获取ListView的打气筒对象
    js处理日期格式yyyy-MM-dd hh:mm:ss
    websocket聊天时,图片压缩处理(url或者input-file)
    canvas图片压缩,局部放大,像素处理
    vscode 右键文件或者文件夹显示菜单
    HTML5-SQLLite连接
    ie下div模拟的表格,表头表体无法对齐
  • 原文地址:https://www.cnblogs.com/threestone/p/2327651.html
Copyright © 2011-2022 走看看