Использование AWS S3 для хранения фотографий
Я собираюсь использовать S3 для хранения загруженных пользователем фотографий. Очевидно, что я не буду передавать файлы изображений пользовательским агентам без изменения их размера. Однако не один размер подойдет, так как некоторые миниатюры будут меньше, чем другие большие превью. Итак, я думал о том, чтобы сделать стандартный набор размеров, масштабируемый от минимального 16x16 до самого высокого 1024x1024. Это хороший способ решить эту проблему? Что, если мне понадобится новый размер позже? Как бы вы решили это?
2 ответа
Предварительная генерация разных размеров и сохранение их в S3 - это прекрасный подход, особенно если вы знаете, какие размеры вам нужны, скорее всего, будут использовать все размеры для всех изображений, и у вас не так много изображений и размеров, чтобы Стоимость хранения чрезмерна.
Вот другой подход, который я использую, когда я не хочу предварительно генерировать и хранить все разные размеры для каждого изображения, или когда я не знаю, какие размеры я хочу использовать в будущем:
Храните оригинальный размер в S3.
Запустите веб-сервер, который может генерировать любой желаемый размер из исходного изображения по запросу.
Вставьте CDN (CloudFront) перед веб-сервером.
Теперь ваш веб-сайт или приложение может запросить URL-адрес, например /16x16/someimage.jpg, из CloudFront. В первый раз, когда это происходит, CloudFront получает измененное изображение с вашего веб-сервера, но затем CloudFront будет кэшировать изображение и обслуживать его для вас, что значительно сократит объем трафика, который попадает на ваш веб-сервер.
Вот сервис, который изменяет размеры изображений с произвольных URL-адресов, обслуживая их через CloudFront: http://filter.to/
Это звучит как хороший подход. В зависимости от вашего приложения вы должны определить набор размеров миниатюр, которые вы всегда генерируете. Но также сохраните исходный файл пользователя, если ваши требования изменятся позже. Если вы хотите добавить новый размер миниатюр, вы можете перебирать все исходные файлы и генерировать из них новые миниатюры. Эта опция дает вам гибкость на потом.