Если вы используете ImageResizer с BLOB-объектами Azure, нужен ли мне плагин AzureReader2?

Я работаю над личным проектом по управлению пользователями моего клуба, он размещен на бесплатном пакете Azure (пока, по крайней мере), частично в качестве эксперимента, чтобы опробовать Azure. Частью создания их записей является добавление фотографии, поэтому у меня есть представление "Карточка контакта", которое позволяет мне видеть, кто они, когда они пришли, и фотографию.

Я установил ImageResizer, и мне очень легко изменить размер 10-мегапиксельной фотографии с камеры и сохранить их в файловой системе локально, но, похоже, для Azure мне нужно использовать их Blobs загружать изображения на веб-сайты Windows Azure, и это для меня в новинку. В документации по ImageResizer сказано, что мне нужно использовать AzureReader2 для работы с BLOB-объектами Azure, но это не бесплатно. Это также говорит в их лучших методах № 5 к

Используйте динамическое изменение размера вместо предварительного изменения размера ваших изображений.

Это не то, о чем я думал, я собирался изменить размеры до 300x300 и 75x75 (для миниатюр) при создании записи пользователей. Но если мне нужно хранить полноразмерные изображения в виде больших двоичных объектов и динамически изменять их размер, тогда я могу просто использовать стандартные средства для загрузки большого двоичного объекта в контейнер, чтобы сохранить его в Azure, а затем для отображения изображений использовать ImageResizer и передайте ему каждое изображение, чтобы изменить его размер по мере необходимости. Таким образом, не нужно использовать AzureReader2, или я неправильно понял, что он делает / как он работает?

Есть ли другой способ рассмотреть?

Я еще не реализовал обрезку, но это уже совсем близко, когда я решил, как на самом деле правильно хранить изображения

3 ответа

Решение

С некоторым трепетом собираюсь не согласиться с астайками здесь. Я верю, что вы МОЖЕТЕ использовать ImageResizer с Azure БЕЗ необходимости AzureReader2. Может быть, я должен квалифицировать это, говоря: "Это работает на моей установке":)

Я использую ImageResizer в приложении MVC 3. У меня есть стандартная учетная запись Azure с контейнером изображений.

Вот мой тестовый код для представления:

@using (Html.BeginForm( "UploadPhoto", "BasicProfile", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="OK" />
}

А вот соответствующий код в методе Post Action:

// This action handles the form POST and the upload
[HttpPost]
public ActionResult UploadPhoto(HttpPostedFileBase file)
{
    // Verify that the user selected a file
    if (file != null && file.ContentLength > 0)
    {
        string newGuid = Guid.NewGuid().ToString();

        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);

        // Create the blob client.
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve reference to a previously created container.
        CloudBlobContainer container = blobClient.GetContainerReference("images");

        // Retrieve reference to the blob we want to create            
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(newGuid + ".jpg");

        // Populate our blob with contents from the uploaded file.
        using (var ms = new MemoryStream())
        {
            ImageResizer.ImageJob i = new ImageResizer.ImageJob(file.InputStream,
                    ms, new ImageResizer.ResizeSettings("width=800;height=600;format=jpg;mode=max"));
            i.Build();

            blockBlob.Properties.ContentType = "image/jpeg";
            ms.Seek(0, SeekOrigin.Begin);
            blockBlob.UploadFromStream(ms);
        }
    }

    // redirect back to the index action to show the form once again
    return RedirectToAction("UploadPhoto");
}

Это "грубый и готовый" код для проверки теории, который, безусловно, может быть улучшен, но он работает как локально, так и при развертывании в Azure. Я также могу просматривать загруженные изображения, которые правильно изменены.

Надеюсь, это кому-нибудь поможет.

Вы также можете загрузить измененные версии в Azure. Итак, вы сначала загружаете исходное изображение в виде большого двоичного объекта, скажем, с именем /original/xxx.jpg; Затем вы создаете изменение размера изображения и загружаете его в Azure с именем скажем /thumbnail/xxx.jpg. Если вы хотите создавать версии с измененным размером на лету или в отдельном потоке, вам может потребоваться временно сохранить оригинал на диск.

Ответ на конкретный вопрос:

Если вы используете ImageResizer с BLOB-объектами Azure, нужен ли мне плагин AzureReader2?

является YES, И как описано в документации Image Resizer - этот плагин используется для чтения / обработки / обслуживания изображений из хранилища BLOB-объектов. Таким образом, нет никаких сомнений - если вы собираетесь использовать Image Resizer, AzureReader2 - ваш необходимый плагин для исправления ситуации. Он позаботится о загрузке / обслуживании Blob.

Хотя я ставлю под сомнение командную компетенцию Image Resizer в Windows Azure, так как они ссылаются Azure SDK v.2в то время как самая последняя версия Azure SDK 1.8, Это означает, что клиентская библиотека хранилища Azure имеет версии 1.7 а также 2.x, В то время как версия 2.x рекомендуется использовать и поставляется с Azure SDK 1.8. Поэтому не ищите Azure SDK 2.0, установите последнюю версию 1.8. И, кстати, используйте диспетчер пакетов Nuget для установки библиотеки хранилища Azure v. 2.0.x.

Другие вопросы по тегам