Опубликован: 30.05.2011 | Доступ: свободный | Студентов: 2250 / 144 | Оценка: 4.12 / 4.41 | Длительность: 12:00:00
Самостоятельная работа 6:

Работа с Windows Azure Blob

< Лекция 14 || Самостоятельная работа 6: 1234567 || Лекция 15 >

Задание 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";
           }

Теперь можно проверить функцию загрузки изображения, выбрав его через диалог загрузки файла.


Рис. 20.5.

Надо сказать, что в таком виде информация об изображении малоинформативная. 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();
                    }
                }
            }
        }

Теперь запустим наше приложение и получим следующее:

Слева от изображения появился список метаданных.

< Лекция 14 || Самостоятельная работа 6: 1234567 || Лекция 15 >
Роза Мальцева
Роза Мальцева
Игнат Гринько
Игнат Гринько

Примерно месяц назад получил на сайте код Дримспарк, сегодня вводил его на сайте Дримспарк, пишет: Недействительный код проверки. Проверьте правильность введенного кода. Код вводил методом: скопировать-вставить.

Дмитрий Дряничкин
Дмитрий Дряничкин
Россия, Казань
Атанас Маринов
Атанас Маринов
Болгария