2012-10-20 2 views
7

Я собираюсь использовать S3 для хранения загруженных пользователем фотографий. Очевидно, что я не буду обслуживать файлы изображений для пользовательских агентов, не изменяя их размеры. Однако не один размер будет делать, так как некоторые миниатюры будут меньше, чем другие более крупные превью. Итак, я подумывал о создании стандартного набора размеров, масштабирующегося от самых низких 16x16 до самых высоких 1024x1024. Это хороший способ решить эту проблему? Что, если мне понадобится новый размер? Как бы вы решили это?Использование AWS S3 для хранения фотографий

ответ

0

Это звучит как хороший подход. В зависимости от вашего приложения вы должны определить набор миниатюр, которые вы всегда генерируете. Но также сохраните исходный файл пользователя, если ваши требования меняются позже. Если вы хотите добавить новый размер эскиза, вы можете перебирать все исходные файлы и создавать из него новые эскизы. Этот вариант дает вам гибкость для последующего использования.

+0

права, я думал дать каждую фотографию уникальный хэш в качестве папки в S3, а затем сохранить original.png и 128.png , 256.png и т. Д. Если мне нужны новые размеры или обрезанные версии или любые другие преобразования на изображениях, я всегда могу перебирать исходные .png. – Sam

12

Предоставление различных размеров и сохранение их в S3 - прекрасный подход, особенно если вы знаете, какие размеры вам нужны, вероятно, будут использовать все размеры для всех изображений и не иметь так много изображений и размеры, при которых стоимость хранения является чрезмерной.

Вот еще один подход, который я использую, когда я не хочу, чтобы заранее создать и хранить все разные размеры для каждого изображения, или когда я не знаю, какие размеры я хочу использовать в будущем:

  1. Сохраните первоначальный размер в S3.

  2. Запустите веб-сервер, который по желанию может сгенерировать любой желаемый размер с исходного изображения.

  3. Прикрепите CDN (CloudFront) перед веб-сервером.

Теперь ваш веб-сайт или приложение может запросить URL-адрес, например /16x16/someimage.jpg, от CloudFront. В первый раз это произойдет, CloudFront получит изображение с измененным размером с вашего веб-сервера, но тогда CloudFront будет кэшировать изображение и обслуживать его для вас, значительно уменьшая количество трафика, попадающего на ваш веб-сервер.

Вот это сервис, который изменяет размер изображения из произвольных URL-адресов, служа им через CloudFront: http://filter.to

+0

Использование CloudFront или filter.to infront моего изображения URI - хорошая идея. Я мог бы даже сделать это с моим разделом S3, нет? – Sam

+0

Конечно, CloudFront отлично подходит для любого статического контента и даже для некоторого динамического контента. Filter.to (работает от друга) бесплатно для разумного использования. –

+0

Возможно ли, чтобы мой динамический сценарий изменения размера ответил кодом HTTP 301 и заголовком местоположения, указывающим на URI AWS S3, и мои элементы HTML изображения будут по-прежнему загружать ресурсы правильно? – Sam

Смежные вопросы