Опубликован: 25.05.2011 | Уровень: специалист | Доступ: платный
Лекция 9:

Microsoft® .NET Services

Лабораторная работа 5. Работа с Blob

Целью лабораторной работы является практическое освоение процесса работы с Blob в Windows Azure.

Аппаратура и программные инструменты, необходимые для лабораторной работы

  1. Настольный или портативный компьютер, поддерживающий виртуализацию, операционная система Microsoft Windows XP, Vista, Windows 7.
  2. Доступ к сети Интернет.
  3. Наличие аккаунта Windows Azure.

Продолжительность лабораторной работы

2 академических часа

Получение Blob данных из хранилища

  1. Откройте меню Пуск | Все программы| Microsoft Visual Studio 2010 | Microsoft Visual Studio 2010.
  2. В меню File выберите Open и затем Project/Solution. Откройте файл проекта ExploringWindowsAzureStorageVS2010\Source\Ex02-WorkingWithBlobs\begin\CS\begin.sln
  3. В Solution Explorer, в проекте RDImageGallery нажмите правой кнопкой по узлу RDImageGallery_WebRole и выберите Properties

  4. На закладке Settings создайте ConnectionString с именем DataConnectionStrin. Выберите Use development storage


  5. Создайте String с именем ContainerName и значением gallery

  6. В Solution Explorer нажмите правой кнопкой по Default.aspx в проекте RDImageGallery_WebRole, выберите View Code, объявите следующие пространства имен
  7. Убедитесь что в начале файла объявлены пространства имен
    using Microsoft.WindowsAzure; 
     using Microsoft.WindowsAzure.StorageClient; 
     using Microsoft.WindowsAzure.ServiceRuntime;
  8. В конец класса _Default добавьте метод
    private void EnsureContainerExists() 
     { 
       var container = GetContainer(); 
       container.CreateIfNotExist(); 
      
       var permissions = container.GetPermissions(); 
       permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
       container.SetPermissions(permissions); 
     }
  9. В конец класса _Default добавьте метод
    private CloudBlobContainer GetContainer() 
     { 
       // Get a handle on account, create a blob storage client and get container proxy 
       var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString"); 
       var client = account.CreateCloudBlobClient(); 
      
       return client.GetContainerReference(RoleEnvironment.GetConfigurationSettingValue("ContainerName")); 
     }
  10. Добавьте следующий код в метод Page_Load
    protected void Page_Load(object sender, EventArgs e) 
     { 
       try 
       { 
         if (!IsPostBack) 
         { 
           this.EnsureContainerExists(); 
         } 
         this.RefreshGallery(); 
       } 
       catch (System.Net.WebException we) 
       { 
         status.Text = "Network error: " + we.Message; 
         if (we.Status == System.Net.WebExceptionStatus.ConnectFailure) 
         { 
           status.Text += "<br />Please check if the blob storage service is running at " + 
           ConfigurationManager.AppSettings["storageEndpoint"]; 
         } 
       } 
       catch (StorageException se) 
       { 
         Console.WriteLine("Storage service error: " + se.Message); 
       } 
     }
  11. В конец класса _Default добавьте метод
    private void RefreshGallery() 
     { 
       images.DataSource = 
         this.GetContainer().ListBlobs(new BlobRequestOptions() 
                                 { 
                                   UseFlatBlobListing = true, 
                                   BlobListingDetails = BlobListingDetails.All 
                                 }); 
       images.DataBind(); 
     }
  12. Нажмите F5 для запустка приложения. Запустится браузер с приложением.


Загрузка Blob данных в хранилище

  1. Откройте Default.aspx.cs
  2. Добавьте метод в конец страницы
    private void SaveImage(string id, string name, string description, 
       string tags, string fileName, string contentType, byte[] data) 
     { 
       // Create a blob in container and upload image bytes to it 
       var blob = this.GetContainer().GetBlobReference(name); 
      
       blob.Properties.ContentType = contentType; 
      
       // Create some metadata for this image 
       var metadata = new NameValueCollection(); 
       metadata["Id"] = id; 
       metadata["Filename"] = fileName; 
       metadata["ImageName"] = String.IsNullOrEmpty(name) ? "unknown" : name; 
       metadata["Description"] = String.IsNullOrEmpty(description) ? "unknown" : description; 
       metadata["Tags"] = String.IsNullOrEmpty(tags) ? "unknown" : tags; 
      
       // Add and commit metadata to blob 
       blob.Metadata.Add(metadata); 
       blob.UploadByteArray(data); 
     }
  3. Измените метод upload_Click
    protected void upload_Click(object sender, EventArgs e) 
     { 
       if (imageFile.HasFile) 
       { 
         status.Text = "Inserted [" + imageFile.FileName + "] - 
       Content Type [" + imageFile.PostedFile.ContentType + "] - 
      Length [" + imageFile.PostedFile.ContentLength + "]"; 
      
         this.SaveImage( 
           Guid.NewGuid().ToString(), 
           imageName.Text, 
           imageDescription.Text, 
           imageTags.Text, 
           imageFile.FileName, 
           imageFile.PostedFile.ContentType, 
           imageFile.FileBytes 
         ); 
      
         RefreshGallery(); 
       } 
       else 
         status.Text = "No image file"; 
     }
  4. Нажмите F5 для запуска приложения
  5. Введете метаданные Name, Description и Tags . Для выбора изображения нажмите Browse

  6. Нажмите Upload Image для публикации изображения в веб приложении

Извлечение метаданных для Blob в хранилище

  1. Откройте Default.aspx в режиме Design, выберите контрол imagesListView и в окне свойств нажмите кнопку Events

  2. Найдите метод OnBlobDataBound и вставьте следующий код
    protected void OnBlobDataBound(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 this blob is a snapshot, rename button to "Delete Snapshot" 
         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) 
           { 
             //bind to metadata 
             metadataRepeater.DataSource = from key in blob.Metadata.AllKeys 
                                           select new 
                                           { 
                                             Name = key, 
                                             Value = blob.Metadata[key] 
                                           }; 
             metadataRepeater.DataBind(); 
           } 
         } 
       } 
     }
  3. Нажмите F5 для запуска приложения. Убедитесь что отображаются метаданные для изображения, загруженного ранее

Нияз Сабиров
Нияз Сабиров

Здравствуйте. А уточните, пожалуйста, по какой причине стоимость изменилась? Была стоимость в 1 рубль, стала в 9900 рублей.

Елена Сапегова
Елена Сапегова

для получения диплома нужно ли кроме теоретической части еще и практическую делать? написание самого диплома требуется?

Вадим Жук
Вадим Жук
Беларусь, г.бобруйск
Владимир Гляделов
Владимир Гляделов
Россия, Набережные Челны