Shrine.rb - Как получить доступ к пути к файлу / необработанному файлу после его загрузки

У меня есть и другие задачи, которые можно выполнять с изображениями. Например, выбор нескольких изображений и объединение их в одно изображение. У меня эта часть работает с RMagick и локальными файлами, а часть загрузки работает с Shrine, но мне нужно соединить их. После загрузки изображения (в идеале решение должно работать либо с локальным хранилищем файловой системы, либо с S3), как я могу снова получить доступ к файлу, чтобы управлять им с помощью ImageMagick / RMagick? Я предполагаю, что если я использую S3, мне нужно будет передать изображения с S3 на сервер и сохранить их временно? Есть ли другой способ сделать это?


person Peter R    schedule 17.07.2018    source источник


Ответы (1)


Вы можете загрузить любой загруженный файл во временный файл, используя Shrine::UploadedFile#download:

tempfile = photo.image.download
# or
tempfile = photo.image[:original].download

Это возвращает экземпляр Tempfile, который является оболочкой для File, поэтому вы можете получить доступ к местоположению на диске через #path:

system "convert #{tempfile.path} -resize 500x500 output.jpg"

Для обработки изображений я бы порекомендовал гем ImageProcessing, который автоматически генерирует Tempfile в качестве результата (т.е. закрыто и удалено при сборке мусора, если это не было ранее).

person janko-m    schedule 20.07.2018
comment
Спасибо, @ janko-m! Это то, что я искал. - person Peter R; 20.07.2018