2013-06-04 2 views
29

Я просто хотел узнать, как можно было бы загружать удаленный файл url с помощью Carrierwave в консоли Rails.Загрузка удаленного URL-файла из Rails Console с Carrierwave

Я пробовал следующее без везения. Я полагаю, что это не обработка Uploader?

user = User.first 
user.remote_avatar_url = "http://www.image.com/file.jpg" 
user.save 

Большое спасибо

+1

Это правильный синтаксис. Что говорит ваш development.log? –

+1

, что, конечно, предполагает User 'mounts_uploader: avatar' –

+0

Спасибо за ответ Джесси. Я пользователь mount_uploader: аватар, AvatarUploader. Мои журналы на самом деле ничего не показывают. Я должен что-то упустить. Он отлично работает через браузер. –

ответ

5
user = User.first 
user.remote_avatar = File.open(FILE_LOCATION) 
user.save 

FILE_LOCATION может быть

File.join(Rails.root, '/files/png-sample.png') 

, если файл находится в папке 'файлы' в рельсы проекта

+0

вопрос в том, как я могу загрузить файл из REMOTE LOCATION (удаленный URL). Не файл в моей системе. –

+1

, если это так, просто используйте метод 'user.remote_avatar_url =" www.example.com/image.jpg', Carrierwave просто загрузит файл и добавит его повторно в приложение. –

15

Посмотрите на "Загрузка файлов с удаленного места 'на этой странице https://github.com/carrierwaveuploader/carrierwave

CarrierWave должен выдавать ошибку, если URL в месте недопустим

2.1.3 :015 > image.remote_image_url = "http" 
=> "http" 
2.1.3 :016 > image.save! 
    (0.2ms) BEGIN 
    (0.2ms) ROLLBACK 
ActiveRecord::RecordInvalid: Validation failed: Image trying to download a file which is not served over HTTP 

Или, если это неизвестный хост:

2.1.3 :017 > image.remote_image_url = "http://foobar" 
=> "http://foobar" 
2.1.3 :018 > image.save! 
    (0.4ms) BEGIN 
    (0.4ms) ROLLBACK 
ActiveRecord::RecordInvalid: Validation failed: Image could not download file: getaddrinfo: nodename nor servname provided, or not known 

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

0

Работает как:

url='http://host.domain/file.jpg'  
time=Time.now.to_i.to_s 
myfile=IO.sysopen("tmp/"+time+"_img."+url.split(".").last,"wb+") 
tmp_img=IO.new(myfile,"wb") 
tmp_img.write open(URI.encode(url)).read 

if File.exist?("tmp/"+time+"_img."+url.split(".").last) 
    "tmp/"+time+"_img."+url.split(".").last 
    image = ActionDispatch::Http::UploadedFile.new(:tempfile => tmp_img, :filename => File.basename(tmp_img)) 
else 
    image=nil 
end 
@your_model.image=image 
@your_model.save 
2

У меня была такая же проблема. и проблема может заключаться в том, что http перенаправляется на https. Поэтому я заменил их с помощью gsub следующим образом:

image.remote_image_url = remote_image_url.gsub('http://','https://') 
image.save! 

это, скорее всего, решит проблему.

0

У меня были проблемы с удаленным_avatar_url, не загружающим изображение или не вызывающим никаких ошибок. Для меня, насколько я могу судить, это потому, что я установил следующее в своей модели.

attr_accessor :remote_avatar_url 

Carrierwave покрывает это для вас, и, хотя я не понимаю, почему, установив его сами педерасты вещи.

+0

Если вы сделаете это, сущность, перезаписать заявление carrierwave 'remote_avatar_url'. – counterbeing

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