Как назначить удаленный файл для Carrierwave?
У меня есть видеомодель со следующим определением:
class Video
require 'carrierwave/orm/activerecord'
mount_uploader :attachment, VideoUploader
mount_uploader :attachment_thumbnail, VideoThumbnailUploader
...
end
Когда я загружаю видеофайл. Он также отправляет файл в нашу службу кодирования Zencoder, которая кодирует видеофайл и создает для него миниатюру.
Обычно я мог бы сделать что-то вроде @video.attachment.url, который вернет путь к видеофайлу. Я хотел бы сделать то же самое с миниатюрой. то есть @video.attachment_thumbnail.url
Однако, поскольку вложение создается нашей службой кодирования, которая также загружает ее в указанный ведро S3. Как назначить вложение для столбца attachment_thumbnail для записи?
Можно ли просто сделать что-то вроде:
@video.update_attributes(
:attachment_thumbnail => 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
)
Можно ли назначить такие файлы как Carrierwave?
Ответы
Ответ 1
Вы можете сделать следующее:
@video.remote_attachment_thumbnail_url = 'https://bucket_name.s3.amazonaws.com/uploads/users/1/video/1/thumb.png'
Но это заставит Carrierwave загружать + перерабатывать файл, а не просто делать его миниатюрой. Если вы не собираетесь использовать обработку Carrierwave, тогда имеет смысл просто сохранить URL-адрес в миниатюре на модели, а не даже использовать Carrierwave.
Ответ 2
Это сработало для меня, с CarrierWave 0.5.8
model.update_attributes(:remote_uploader_url => "http://path/to/image.jpg")
Конечно, для этого вам нужно установить remote_uploader_url
как attr_accessible
.
Ответ 3
Я тоже искал это.
Точка блокирования в случае zencoder будет заключаться в том, что Carrierwave не отслеживает разные версии файлов типа для исходного файла. Он ссылается только на исходный файл.
Итак, имея исходный файл как .mp4, версия миниатюры как .png не работает.
Хотя вы можете иметь "image.png", а также отслеживать "thumb_png_image.png", вы также не можете создать "thumb_jpg_image.jpg" для того же файла.
В противном случае вы можете создать фиктивную версию и использовать условное управление версиями, чтобы CW не обрабатывал ее.
Поскольку CW в любом случае создавал бы фиктивную версию, но не загружал бы ее, вы могли бы ссылаться на путь, соответствующий файлу, возвращаемому Zencoder. Но хорошо...
Ответ 4
В конце этого эпизода (7:35) Райан Бэйтс добавляет remote_image_url в загрузку формы файла:
http://railscasts.com/episodes/253-carrierwave-file-uploads