Veuillez me suggérer un moyen d'enregistrer une image à partir d'une URL avec le trombone.
Réponses
Trop de publicités?Dans Paperclip 3.1.4, c'est devenu encore plus simple.
def picture_from_url(url)
self.picture = URI.parse(url)
end
C'est légèrement mieux que open(url). Parce qu'avec open(url), vous obtiendrez "stringio.txt" comme nom de fichier. Avec la méthode ci-dessus, vous obtiendrez un nom de fichier correct 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"
Comme ces réponses sont anciennes, en voici une plus récente :
Ajoutez l'URL de l'image distante au contrôleur souhaité dans la base de données.
$ rails generate migration AddImageRemoteUrlToYour_Controller image_remote_url:string
$ rake db:migrate
Modifiez 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
*En Rails4, vous devez ajouter l'attr_accessible dans le contrôleur.
Mettez à jour votre formulaire, si vous autorisez les autres à télécharger une image à partir d'une URL.
<%= f.input :image_remote_url, label: "Enter a URL" %>
C'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 fait juste un identifiant aléatoire.