Enregistrer l’image de l’URL par un trombone

S’il vous plaît me suggérer un moyen de sauvegarder une image à partir d’une URL par Paperclip.

    Voici un moyen simple:

    require "open-uri" class User < ActiveRecord::Base has_attached_file :picture def picture_from_url(url) self.picture = open(url) end end 

    Alors simplement:

     user.picture_from_url "http://soffr.miximages.com/ruby-on-rails/ps_logo2.png" 

    Dans Paperclip 3.1.4, c’est devenu encore plus simple.

     def picture_from_url(url) self.picture = URI.parse(url) end 

    C’est un peu mieux que d’ouvrir (url). Car avec open (url) vous allez avoir “ssortingngio.txt” comme nom de fichier. Avec ce qui précède, vous allez obtenir un nom propre du fichier basé sur l’URL. c’est à dire

     self.picture = URI.parse("http://something.com/blah/avatar.png") self.picture_file_name # => "avatar.png" self.picture_content_type # => "image/png" 

    Commencez par télécharger l’image avec le TempFile sur un TempFile , puis assignez simplement l’object tempfile et enregistrez votre modèle.

    Cela n’a pas fonctionné pour moi jusqu’à ce que j’utilise “open” pour l’URI analysé. une fois que j’ai ajouté “open” cela a fonctionné!

     def picture_from_url(url) self.picture = URI.parse(url).open end 

    Ma version trombone est 4.2.1

    Avant l’ouverture, le type de contenu n’était pas détecté, car ce n’était pas un fichier. Il dirait image_content_type: “binary / octet-stream”, et même si je le remplace avec le bon type de contenu, cela ne fonctionnerait pas.

    Cela peut vous être utile. Voici le code utilisant un trombone et une image présents dans l’URL distante.

     require 'rubygems' require 'open-uri' require 'paperclip' model.update_atsortingbute(:photo,open(website_vehicle.image_url)) 

    En modèle

     class Model < ActiveRecord::Base has_attached_file :photo, :styles => { :small => "150x150>", :thumb => "75x75>" } end 

    Comme ceux-ci sont anciens, la réponse est la suivante:

    Ajoutez l’URL distante d’image à votre contrôleur désiré dans la firebase database

     $ rails generate migration AddImageRemoteUrlToYour_Controller image_remote_url:ssortingng $ rake db:migrate 

    Modifier votre modèle

     attr_accessible :description, :image, :image_remote_url . . . def image_remote_url=(url_value) self.image = URI.parse(url_value) unless url_value.blank? super end 

    * Dans Rails4, vous devez append attr_accessible dans le Controller.

    Mettez à jour votre formulaire si vous autorisez d’autres personnes à télécharger une image à partir d’une URL

     < %= f.input :image_remote_url, label: "Enter a URL" %> 

    Ceci est une méthode hardcore:

     original_url = url.gsub(/\?.*$/, '') filename = original_url.gsub(/^.*\//, '') extension = File.extname(filename) temp_images = Magick::Image.from_blob open(url).read temp_images[0].write(url = "/tmp/#{Uuid.uuid}#{extension}") self.file = File.open(url) 

    où Uuid.uuid crée simplement un identifiant aléatoire.