Работа с 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(); } } } }
Теперь запустим наше приложение и получим следующее:
Слева от изображения появился список метаданных.