Основной совет — не изменять размер изображений на лету, так как это может занять некоторое время, и ваши пользователи могут столкнуться с огромным временем отклика во время этой операции. Если у вас есть какой-то предопределенный набор стилей, было бы разумно сгенерировать их заранее и просто вернуть обратно, когда это необходимо.
Что ж, вот что можно сделать, если нет другого выхода.
def download_from_s3 url_to_s3, filename
uri = URI(url_to_s3)
response = Net::HTTP.get_response(uri)
File.open(filename, 'wb'){|f| f.write(response.body)}
end
Здесь мы в основном загружали изображение, расположенное по заданному URL-адресу, и сохраняли его как файл локально. Изменение размера можно выполнить несколькими способами (это зависит от того, хотите ли вы использовать загруженный файл как вложение Paperclip
). Наиболее распространенным подходом здесь было бы использование image-magick
и его сценария командной строки convert
. Вот пример изменения размера изображения до ширины 30
:
convert -strip -geometry 30 -quality 100 -sharpen 1 '/photos/aws_images/000/000/015/original/index.jpg' '/photos/aws_images/000/000/015/original/S_30_WIDTH__q_100__index.jpg' 2>&1 > /dev/null
Вы можете найти документацию по convert
здесь, она подходит не только для изменения размера изображения, но и для преобразование между форматами изображений, размытие, обрезка и многое другое! Также вас может заинтересовать гем "Attachment-on-the-Fly", который кажется немного устарел, но имеет некоторое представление о том, как изменить размер изображений с помощью convert
.
Последний шаг — загрузить изображение с измененным размером в какой-нибудь S3 bucket
. Я предполагаю, что у вас уже есть aws-sdk
gem и AWS::S3
экземпляр (документацию можно найти здесь).
def upload_to_s3 bucket_name, key, file
s3 = AWS::S3.new(:access_key_id => 'YOUR_ACCESS_KEY_ID', :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
bucket = s3.buckets[bucket_name]
obj = bucket.objects[key]
obj.write(File.open(file, 'rb'), :acl => :public_read)
end
Итак, здесь вы получаете объект AWS::S3
для связи с сервером S3
, указываете имя своей корзины и желаемый ключ, и, по сути, загружаете изображение с возможностью сделать его видимым для всех в Интернете. Обратите внимание, что существует множество дополнительных параметров загрузки (включая шифрование файлов, права доступа, метаданные и многое другое).
person
twonegatives
schedule
05.06.2015