MyBlobber: 访问 Windows Azure 存储 Blob
一个简单的 C# 命令行实用程序,用于演示访问 Windows Azure 存储。
引言
本文介绍 Windows Azure 云存储。我一直在寻找一种简单的方法来演示 Windows Azure 的存储基础知识。那时,我想到了一个简单的命令行工具来与 Azure 存储交换数据。使用命令行工具的另一个好处是,我们可以编写一个简单的批处理文件或 Windows 7 PowerShell 脚本,该脚本将调用此工具,以定期将重要文件备份到 Windows Azure 云存储。
背景
这是我关于 Windows Azure(Microsoft 的一项云计算计划)系列文章中的第二篇。 您可能想在继续之前阅读第一篇文章 Hello Windows Azure。
Windows Azure 存储
Windows Azure 存储主要提供三种类型的存储
- Blob - 用于存储文件/信息块/大型数据缓冲区 (Blob = 二进制大对象)。
- 表 - 大规模、可扩展的结构化存储。
- 队列 - 用于 FIFO 存储/调度机制/异步通信。
我们将更详细地了解 Blob 存储,它提供了一种存储文件的方法,可以用作重要文件的备份存储。要访问它,您需要在 Windows Azure 上拥有一个存储服务帐户,您可以在 www.azure.com 上注册。 访问存储服务的 API 是 RESTful 的,并且通过 HTTP/S 工作。 Blob 存储被组织成容器,这些容器充当保存文件的文件夹,并且可以具有公共或私有可访问性。 可以通过 URI 访问公共容器中的信息,例如 *http://[帐户].blob.core.windows.net/[容器]/[文件]*。 例如: *http://bhavik.blob.core.windows.net/mycontainer/test.txt*。 除 Blob 外,与 Blob 相关的其他元数据可以存储为键值对。下图显示了 Blob 的组织方式。
* 图片由 http://blogs.msdn.com 提供。
Blobber 代码
该代码简洁、简单且不言自明。我们需要了解的只是 C# 中命令行参数解析和应用程序配置设置的一些简单概念。要访问 Azure 存储,它使用 Azure SDK 示例中提供的 *StorageClient.dll*。 通常,您可以在“*C:\Program Files\Windows Azure SDK\v1.0\samples.zip\StorageClient*”中找到它。 *StorageClient.dll* 封装了 MSDN 中描述的 Azure 存储 API,如 MSDN。
以下代码块仅演示了从 Blob 上传和下载数据
// Code to upload file to Blob
try
{
//Create Storage Account Info
StorageAccountInfo StorageAcc = new StorageAccountInfo(
AccessUri,
null,
(String)ConfigurationSettings.AppSettings["AccountName"],
(String)ConfigurationSettings.AppSettings["AccountSharedKey"]);
// Container names have the same restrictions as DNS names
BlobStorage blobStorage = BlobStorage.Create(StorageAcc);
BlobContainer blobContainer = null;
blobContainer = blobStorage.GetBlobContainer(
ConfigurationSettings.AppSettings["ContainerName"]);
if (false == blobContainer.DoesContainerExist())
{
//Verbose("Container does not exist! Creating One.");
blobContainer.CreateContainer(new NameValueCollection(),
ContainerAccessControl.Private);
}
// Create metadata to be associated with the blob
NameValueCollection metadata = new NameValueCollection();
metadata["FileName"] = File;
metadata["Submitter"] = "Blobber";
//Create Blob Properties object
BlobProperties properties = new BlobProperties(File);
properties.Metadata = metadata;
properties.ContentType = MimeType(File);
// Create the blob
byte [] FileContents = System.IO.File.ReadAllBytes(FileName);
BlobContents fileBlob = new BlobContents(FileContents);
blobContainer.CreateBlob(properties, fileBlob, true);
}
catch (Exception e)
{
Console.WriteLine(e.Message.ToString());
bRetval = false;
}
// Code to download file from Blob
try
{
//Create Storage Account Info
StorageAccountInfo StorageAcc = new StorageAccountInfo(
AccessUri,
null,
(String)ConfigurationSettings.AppSettings["AccountName"],
(String)ConfigurationSettings.AppSettings["AccountSharedKey"]);
// Container names have the same restrictions as DNS names
BlobStorage blobStorage = BlobStorage.Create(StorageAcc);
BlobContainer blobContainer = null;
blobContainer = blobStorage.GetBlobContainer(
ConfigurationSettings.AppSettings["ContainerName"]);
//If Container or Blob Does not exist exception shall be thrown
FileStream fs = File.Create(FileName);
BlobContents fileBlob = new BlobContents(fs);
BlobProperties propBlob;
propBlob = blobContainer.GetBlob(sFile, fileBlob, true);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
bRetval = false;
}
Blobber 用法
Blobber 的用法非常简单。 我们需要在 *blobber.config* 中设置默认帐户名、访问密钥和容器名称,该文件是应用程序配置文件。 示例配置 XML 可以在此处下载 - *Blobber.exe.config*。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- Remove this if not using local development machine -->
<add key="AccountName" value="devstoreaccount1"/>
<add key="AccountSharedKey" value="Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=="/>
<add key="BlobStorageEndpoint" value="http://127.0.0.1:10000/"/>
<!--
<add key="AccountName" value="PUT YOUR USER NAME HERE"/>
<add key="AccountSharedKey" value="PUT YOUR KEY HERE"/>
<add key="BlobStorageEndpoint" value="http://blob.core.windows.net"/>
-->
<add key="ContainerName" value="mycontainer"/>
</appSettings>
</configuration>
设置完成后,我们可以简单地从命令行使用 Blobber。 用法示例
Blobber -u test.txt
参数选项
- '-u' 或 '-d <file>':指定要上传或下载的文件名。 带有空格的文件名应包含在“双引号”中。
- '-v' <0/1>:详细程度 0(关闭:默认)或 1(打开)。 此参数是可选的,如果使用,则应首先使用。
示例输出
历史
- 2009 年 11 月 21 日:自上一篇文章以来没有太多时间。 终于找到一个星期六上传 v0.1。