您的位置:首页 > 其它

Windows Azure Storage (2) Windows Azure Storage Service存储服务之Blob详解(上)

2012-01-19 22:24 519 查看
  《Windows Azure Platform 系列文章目录

[b][b]  如果读者使用的是国内由世纪互联运维的Azure China服务,请参考笔者的博文Azure China (4) 管理Azure China Storage Account[/b][/b]

[b][b][b][b]  如果需要参考Azure China使用SAS Token的Sample Code,请参考笔者的博文:Azure China (10) 使用Azure China SAS Token[/b][/b][/b][/b]

  本章我们会介绍如何在本地模拟器使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐