云计算 频道

Azure实战:实例解读如何操作Blob存储

  为了检索存储在Blob中的信息, BlobContainer 类提供了一套访问函数查询Blob容器中的Blob或特定Blob的属性,下面是从Blob检索信息的一般步骤。

  1、首先创建一个C#容器类 MediaInfo ,它有三个属性: BlobName , MediaUri 和 MediaID ,这三个属性用来容纳Blob记录的信息。

    public class MediaInfo
    {
    
public MediaInfo(string blobName,
    
string mediaAddress,
    
string mediaID)
    {
    BlobName
= blobName;
    MediaUri
= mediaAddress;
    MediaID
= mediaID;
    }
    
public string MediaUri{get; set;}
    
public string BlobName { get; set; }
    
public string MediaID { get; set; }
    }
    
private void _DataBind()
    {
    IEnumerable
<object> blobs = _blobContainer.ListBlobs(string.Empty, false);
    List
<MediaInfo> mediaList= new List<MediaInfo>();
    foreach (
object blob in blobs)
    {
    
if ((blob as BlobProperties )!= null)
    {
    BlobProperties blobProperties
=
    _blobContainer.GetBlobProperties((blob
as BlobProperties).Name);
    NameValueCollection mediaEntryProperties
= blobProperties.Metadata;
    mediaList.Add(
    
new MediaInfo(
    blobProperties.Name,
    (blob
as BlobProperties).Uri.ToString(),
    mediaEntryProperties[
"MediaID"]
    )
    );
    }
    }
    BlobLinksView.DataSource
= filesList;
    BlobLinksView.DataBind();
}

 

  2、在 Default.aspx 中定义一个 GridView 显示Blob记录。

    <asp:GridView
    id
="BlobLinksView"
    DataKeyNames
="BlobName"
    AllowPaging
="False"
    AutoGenerateColumns
="False"
    GridLines
="Vertical"
    Runat
="server"
    onrowcommand
="RowCommandHandler"
    BackColor
="#B3F2FD" ForeColor="Black"
    BorderColor
="#0066FF" BorderStyle="None" BorderWidth="1px" CellPadding="4"
    Font
-Size="Small" Width="394px">
    
<Columns>
    
<asp:ButtonField Text="Delete" CommandName="DeleteEntry"/>
    
<asp:HyperLinkField
    HeaderText
="Blob ID"
    DataTextField
="MediaID"
    DataNavigateUrlFields
="MediaUri" />
    
</Columns>
    
<RowStyle BackColor="#F7F7DE" />
    
<FooterStyle BackColor="#CCCC99" />
    
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
    
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
    
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
    
<AlternatingRowStyle BackColor="White" />
    
</asp:GridView>
    protected void RowCommandHandler(
object sender, GridViewCommandEventArgs e)
    {
    try
    {
    
if (e.CommandName == "DeleteEntry")
    {
    
int index = Convert.ToInt32(e.CommandArgument);
    
string blobName = (string)BlobLinksView.DataKeys[index].Value;
    
if (_blobContainer.DoesBlobExist(blobName))
    {
    _blobContainer.DeleteBlob(blobName);
    }
    }
    }
    catch { }
    _DataBind();
    }

 

  GridView的列与 MediaInfo 的属性一一对应,如 DataTextField 与 MediaID 属性对应, DataNavigateUrlFields 与 MediaUri 属性对应。

  3、使用 _blobContainer 实例调用 ListBlobs() ,传递两个参数: prefix (在这里是空字符串)和 boolean 标志,这个函数应该返回一个 IEnumerable 类型的实例。

  4、遍历Blob记录集,用 List 类型填充 mediaList 实例本地集合。

  5、将 mediaList 作为 GridView 的 DataSource (数据源),调用 DataBind() 方法将数据绑定到 GridView ,根据设计,调用 ListBlobs() 必须先于调用 GetBlobProperties() ,否则调用 GetBlobProperties() 将总是返回一个null对象。

  如果要删除Blob,需要传递Blob名,为了获得Blob名,我们需要在 Default.aspx 的 GridView 中插入一个原始命令处理程序,并链接到一个按钮,点击相应的视图项目时,为了检索特定的Blob项目ID,在处理程序 RowCommandHandler 后应该插入下面的代码:

  ListBlobs() 检索Blob记录外,也可以使用支持REST查询的工具或应用程序进行检索,如 Fiddler ,它可以产生 HTTP GET/POST/UPDATE 请求。

    protected void RowCommandHandler(object sender, GridViewCommandEventArgs e)
    {
    try
    {
    
if (e.CommandName == "DeleteEntry")
    {
    
int index = Convert.ToInt32(e.CommandArgument);
    
string blobName = (string)BlobLinksView.DataKeys[index].Value;
    
if (_blobContainer.DoesBlobExist(blobName))
    {
    _blobContainer.DeleteBlob(blobName);
    }
    }
    }
    catch { }
    _DataBind();
    }

除了使用 ListBlobs() 检索Blob记录外,也可以使用支持REST查询的工具或应用程序进行检索,如 Fiddler ,它可以产生 HTTP GET/POST/UPDATE 请求。

  图3显示了使用 Fiddler 2. 执行REST查询的查询结果。

 

Azure实战:实例解读如何操作Blob存储

  图 3 使用 Fiddler 2 HTTP 调试工具对Blob数据执行REST查询的查询结果

  查询字符串的语法示例如下:

  http://127.0.0.1:10000/devstoreaccount1/blobpayload/caa95517-3414-4bc2-8f16-0a44a6f156e1xml

  成功的REST查询,返回代码是200。

0
相关文章