Работа с Windows Azure Blob
Задание 2. Загрузка изображений
Необходимо добавить следующую ссылку в AzureBlobSample.cs:
using System.Collections.Specialized;
Создадим метод, сохраняющий бинарный объект и задающий его метаданные:
private void SaveImage(string id, string name, string description, string tags,
string fileName, string contentType, byte[] data)
{
// Создание BLob - объекта в контейнере
var blob = this.GetContainer().GetBlobReference(name);
blob.Properties.ContentType = contentType;
// определение метаданных, добавление метаданных blob-объекту и загрузка данных
try
{
blob.UploadFromStream(fu_upload.FileContent);
blob.Metadata["Id"] = id;
blob.Metadata["Filename"] = fileName;
blob.Metadata["ImageName"] = String.IsNullOrEmpty(name) ? "unknown" : name;
blob.Metadata["Description"] = String.IsNullOrEmpty(description) ? "unknown" : description;
blob.SetMetadata();
lv_images.DataBind();
}
catch (Exception ex)
{ lb_status.Text = ex.Message; }
}
}Остается только написать метод - обрабатывающий событие нажатия кнопки btn_upload:
protected void btn_upload_Click(object sender, EventArgs e)
{
if (fu_upload.HasFile)
{
lb_status.Text = "Inserted [" + fu_upload.FileName + "] -
Content Type [" + fu_upload.PostedFile.ContentType + "] -
Length [" + fu_upload.PostedFile.ContentLength + "]";
this.SaveImage(Guid.NewGuid().ToString(),
tb_name.Text,
tb_desc.Text,
fu_upload.FileName,
fu_upload.PostedFile.ContentType,
fu_upload.FileBytes
);
RefreshGallery();
}
else
lb_status.Text = "No image file";
}Теперь можно проверить функцию загрузки изображения, выбрав его через диалог загрузки файла.
Надо сказать, что в таком виде информация об изображении малоинформативная. Blob, как мы знаем, может хранить привязанные к нему метаданные. Добавим в наше решение функционал, позволяющий получать и отображать метаданные, ассоциированные с конкретным изображением.
Для начала, необходимо создать метод обрабатывающий событие ItemDataBound элемента управления lv_images:
protected void lv_images_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var metadataRepeater = e.Item.FindControl("blobMetadata") as Repeater;
var blob = ((ListViewDataItem)(e.Item)).DataItem as CloudBlob;
if (blob != null)
{
if (blob.SnapshotTime.HasValue)
{
var delBtn = e.Item.FindControl("deleteBlob") as LinkButton;
if (delBtn != null) delBtn.Text = "Delete Snapshot";
var snapshotBtn = e.Item.FindControl("SnapshotBlob") as LinkButton;
if (snapshotBtn != null) snapshotBtn.Visible = false;
}
if (metadataRepeater != null)
{
metadataRepeater.DataSource = from key in blob.Metadata.AllKeys
select new
{
Name = key,
Value = blob.Metadata[key]
};
metadataRepeater.DataBind();
}
}
}
}Теперь запустим наше приложение и получим следующее:
Слева от изображения появился список метаданных.

