2013-02-15 2 views
3

Я в процессе создания сайта MVC Windows Azure, который включает пользователей, загружающих изображения. Я хотел сохранить изображения в капли. Я искал учебники, но большинство из них касаются Webapps, а не сайтов MVC.Использование Azure Blobs с Azure Website

Единственный полезный учебник я нашел: http://www.codeproject.com/Articles/490178/How-to-Use-Azure-Blob-Storage-with-Azure-Web-Sites

Я новичок в целом MVC/Windows Azure/Visual Studio сцены, и я запуталась в шаге 7, где я должен был подключиться к Облако Счет хранения.

var storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString); 

Я не могу понять, где я должен положить этот бит кода.

То же самое для кода Шаг 8: Создание контейнера

blobStorage = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobStorage.GetContainerReference("productimages"); 
if (container.CreateIfNotExist()) 
{ 
    // configure container for public access 
    var permissions = container.GetPermissions(); 
    permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
    container.SetPermissions(permissions); 
} 

И Шаг 9: сохранить изображение в BLOB

string uniqueBlobName = string.Format("productimages/image_{0}{1}", 
    Guid.NewGuid().ToString(), Path.GetExtension(image.FileName)); 
CloudBlockBlob blob = blobStorage.GetBlockBlobReference(uniqueBlobName); 
blob.Properties.ContentType = image.ContentType; 
blob.UploadFromStream(image.InputStream); 

Любая помощь будет очень ценна. Также приветствуются любые другие ссылки на соответствующие учебные пособия.

Большое спасибо!

+0

взглянуть на это вместо: http://www.tugberkugurlu.com/archive/how-to-use- windows-azure-blob-storage-service-with-asp-net-mvc-web-приложение – JuneT

+0

Спасибо! Это действительно помогло! –

ответ

2

Я предполагаю, что вы добавили Windows Azure Storage NuGet package в свой проект веб-приложения? Это не показалось явным в цитируемой вами ссылке, но если бы вы этого не сделали, вы бы увидели кучу неразрешенных ошибок компилятора.

Что касается кода, это скорее зависит от вас. Назначение storageAccount похоже на установку строки подключения к базе данных; ничего не происходит через провод, поэтому вы можете установить его один раз и сделать его доступным во всем приложении как часть некоторого статического экземпляра класса.

Что касается создания контейнера, вы должны делать это каждый раз, когда хотите хранить данные - считайте это равносильным созданию папки в файловой системе или, возможно, таблице в реляционной базе данных. Если ваше приложение всегда хранит информацию в том же «жестко закодированном» контейнере, вы можете заранее установить свой контейнер на портале и не создавать код.

Ввод кода, подобного этому, хотя и обеспечивает небольшую отказоустойчивость в случае, если контейнер был удален через какой-либо внешний процесс; так же, как приложение, использующее SQL Server , может проверить наличие таблицы Employee перед выполнением обновлений/извлечения, так как это возможно (но маловероятно), кто-то удалил таблицу Employee через какой-либо другой инструмент SQL.

Сохранение изображения в блобе будет помещено непосредственно за любой контроллер, ответственный за инициирование этого действия. Здесь вы делаете «настоящую» работу. Код в вашем примере конкретно ссылается на контейнер productimages, поэтому ему может немедленно предшествовать код на шаге 8, если вы хотите убедиться, что нет возможности удалить контейнер (например, через портал). Опять же, это было бы похоже на проверку наличия таблицы базы данных в традиционном коде клиент/сервер при каждом обращении к данным в ней (что большинство из нас может считать излишним, и мы прибегаем к обработке исключений, чтобы покрыть эту непредвиденную ситуацию).

0

Старый вопрос, но все еще может помочь noobs!

Azure Webapps действительно принимает приложения MVC.Webapps on Azure - это всего лишь контейнер, в котором я уверен, что может принимать различные типы приложений на основе ASP.NET, форм или MVC, C# или VB.net.

Предполагая, что вы знаете основы приложения MVC, вы можете просто создать Azure Webapp и опубликовать его там. Это так же прямо, как это.

Этот код:

var storageAccount = CloudStorageAccount.Parse(
    ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString); 

И это:

blobStorage = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobStorage.GetContainerReference("productimages"); 
if (container.CreateIfNotExist()) 
{ 
    // configure container for public access 
    var permissions = container.GetPermissions(); 
    permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
    container.SetPermissions(permissions); 
} 

Может пойти в новый класс специально для Blob услуг например назвать это что-то вроде blobServices.cs и сохраните его в корневом каталоге вашего приложения MVC, и это может выглядеть так:

var storageAccount = CloudStorageAccount.Parse(
      ConfigurationManager.ConnectionStrings["StorageConnection"].ConnectionString); 

    blobStorage = storageAccount.CreateCloudBlobClient(); 
    CloudBlobContainer container = blobStorage.GetContainerReference("productimages"); 
    if (container.CreateIfNotExist()) 
    { 
     // configure container for public access 
     var permissions = container.GetPermissions(); 
     permissions.PublicAccess = BlobContainerPublicAccessType.Container; 
     container.SetPermissions(permissions); 
    } 

который, вероятно, лучшая практика. С этого момента в контроллер/с вашего приложения MVC вы можете сделать что-то вроде этого:

namespace blabla.cs 
{ 

    public controller myBlobController 
    { 

     //instantiate the blob service 
     BlobProfileImageServices _blobServices = new BlobProfileImageServices(); 

     public public ActionResult Index() 
     { 



      //call your blob storage service 
      //and loop through each blob 
      CloudBlobContainer blobContainer = _blobServices.GetCloudBlobContainer(); 
      List<string> blobs = new List<string>(); 
      foreach (var blobItem in blobContainer.ListBlobs()) 
      { 
       blobs.Add(blobItem.Uri.ToString()); 

      } 


     } 

    } 
}