Опубликован: 30.05.2011 | Уровень: специалист | Доступ: платный
Самостоятельная работа 6:
Работа с Windows Azure Blob
asp - код веб формы:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AzureBlobSample.aspx.cs"
Inherits="WebRole1.AzureBlobSample" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Font-Bold="True" Font-Size="X-Large"
Text="My Image Gallery - Azure Blob Example"></asp:Label>
<br />
<br />
<table style="width:100%;">
<tr>
<td>
<asp:Label ID="lb_name" runat="server" Text="Название"></asp:Label>
</td>
<td>
<asp:TextBox ID="tb_label" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lb_desc" runat="server" Text="Описание"></asp:Label>
</td>
<td>
<asp:TextBox ID="tb_desc" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lb_file" runat="server" Text="Файл"></asp:Label>
</td>
<td>
<asp:FileUpload ID="fu_upload" runat="server" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="btn_upload" runat="server" onclick="btn_upload_Click"
Text="Загрузить" />
</td>
</tr>
<tr>
<td>
</td>
<td>
</td>
</tr>
<tr>
<td>
<asp:Label ID="lb_status" runat="server"></asp:Label>
</td>
<td>
<asp:ListView ID="lv_images" runat="server">
<LayoutTemplate>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</LayoutTemplate>
<EmptyDataTemplate>
<h2>No Data Available</h2>
</EmptyDataTemplate>
<ItemTemplate>
<div class="item">
<ul style="width:40em;float:left;clear:left" >
<asp:Repeater ID="blobMetadata" runat="server">
<ItemTemplate>
<li><%# Eval("Name") %><span><%# Eval("Value") %></span></li>
</ItemTemplate>
</asp:Repeater>
<li>
</li>
</ul>
<img src="<%# Eval("Uri") %>" alt="<%# Eval("Uri") %>" style="float:left"/>
</div>
</ItemTemplate>
</asp:ListView>
</td>
</tr>
<tr>
<td>
<br />
</td>
<td>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>Отметим, что элемент управления, при помощи которого мы будем отображать имеющиеся изображения - это ListView с идентификатором lv_images. Для того чтобы сделать возможным повторени вышеуказанного шаблона для каждого элемента списка мы использовали Repeater (подробнее см. в списке вспомогательных материалов)
Теперь в метод Page_Load добавим код, который при первой загрузке нашей страницы будет проверять наличие контейнера и выводить сообщение о возможных ошибках и привязывать lv_images к источнику данных, вызовом метода RefreshGallery:
try
{
if (!IsPostBack)
{
this.EnsureContainerExists();
}
this.RefreshGallery();
}
catch (System.Net.WebException we)
{
lb_status.Text = "Network error: " + we.Message;
if (we.Status == System.Net.WebExceptionStatus.ConnectFailure)
{
lb_status.Text += "<br />Please check if the blob service is running at " +
ConfigurationManager.AppSettings["storageEndpoint"];
}
}
catch (StorageException se)
{
Console.WriteLine("Storage service error: " + se.Message);
}Метод RefreshGallery - привязывает lv_images к источнику данных(контейнеру бинарных объектов):
private void RefreshGallery()
{
lv_images.DataSource =
this.GetContainer().ListBlobs(new BlobRequestOptions()
{
UseFlatBlobListing = true,
BlobListingDetails = BlobListingDetails.All
});
lv_images.DataBind();
}Запустим приложение и убедимся, что оно выполняется верно.
