CarrierWave how to store file at given url

前端 未结 3 1272
春和景丽
春和景丽 2020-12-25 13:44

I have CarrierWave working fine through the typical ORM setup and upload via form. I would like to figure out how to use CarrierWave outside of the form submission context.

相关标签:
3条回答
  • 2020-12-25 14:10

    in the controller after user sign up (assuming your user image field is called simply 'image')

    gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
    @user.remote_image_url = gravatar_url
    @user.save 
    

    i think this is the best way according to carrierwave docs and some searching around.

    enjoy!

    0 讨论(0)
  • 2020-12-25 14:27

    I've had lots of trouble trying to figure out how to get store! to work with local file paths. It turns out that store! actually takes a file as a parameter, not a string.

    For the URL, you'll need to require 'open-uri' first, then open the file/url. Something like this should work:

    require 'open-uri'
    gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon"
    tempfile = open(gravatar_url)    
    
    uploader = ImageUploader.new
    uploader.store! tempfile
    

    The same will work with a file path, but you don't have to require open-uri in that case.

    0 讨论(0)
  • 2020-12-25 14:32

    Actually you can do this using the built in remote_{attribute}_url property if you are using the active record/model helpers (see the CarrierWave railscast for the details). However, I dug around in the source code a bit to see how this actually works and it appears that even if you are not you should be able to use the following:

    uploader = ImageUploader.new
    uploader.download! some_remote_url
    uploader.store!
    

    Give it a try.

    0 讨论(0)
提交回复
热议问题