为了检索存储在Blob中的信息, BlobContainer 类提供了一套访问函数查询Blob容器中的Blob或特定Blob的属性,下面是从Blob检索信息的一般步骤。
1、首先创建一个C#容器类 MediaInfo ,它有三个属性: BlobName , MediaUri 和 MediaID ,这三个属性用来容纳Blob记录的信息。
{
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记录。
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 请求。
{
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查询的查询结果。
图 3 使用 Fiddler 2 HTTP 调试工具对Blob数据执行REST查询的查询结果
查询字符串的语法示例如下:
http://127.0.0.1:10000/devstoreaccount1/blobpayload/caa95517-3414-4bc2-8f16-0a44a6f156e1xml
成功的REST查询,返回代码是200。
