65.9K
CodeProject 正在变化。 阅读更多。
Home

MyBlobber: 访问 Windows Azure 存储 Blob

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (4投票s)

2009 年 11 月 20 日

GPL3

3分钟阅读

viewsIcon

51515

downloadIcon

612

一个简单的 C# 命令行实用程序,用于演示访问 Windows Azure 存储。

引言

本文介绍 Windows Azure 云存储。我一直在寻找一种简单的方法来演示 Windows Azure 的存储基础知识。那时,我想到了一个简单的命令行工具来与 Azure 存储交换数据。使用命令行工具的另一个好处是,我们可以编写一个简单的批处理文件或 Windows 7 PowerShell 脚本,该脚本将调用此工具,以定期将重要文件备份到 Windows Azure 云存储。

Windows Azure Storage Blob

背景

这是我关于 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 的组织方式。

Windows Azure Storage 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(打开)。 此参数是可选的,如果使用,则应首先使用。

示例输出

Windows Azure Storage Blob

历史

  • 2009 年 11 月 21 日:自上一篇文章以来没有太多时间。 终于找到一个星期六上传 v0.1。
© . All rights reserved.