Comment puis-je télécharger un fichier depuis une URL et l’enregistrer dans Rails?

J’ai une URL vers une image que je veux enregistrer localement, afin que je puisse utiliser Paperclip pour produire une miniature pour mon application. Quelle est la meilleure façon de télécharger et d’enregistrer l’image? (J’ai regardé dans le traitement des fichiers rbuy mais je n’ai rien trouvé.)

Essaye ça:

require 'open-uri' open('image.png', 'wb') do |file| file << open('http://example.com/image.png').read end 

Une version encore plus courte:

 require 'open-uri' download = open('http://example.com/image.png') IO.copy_stream(download, '~/image.png') 

Pour conserver le même nom de fichier:

 IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}") 

Si vous utilisez PaperClip, le téléchargement depuis une URL est désormais géré automatiquement.

En supposant que vous avez quelque chose comme:

 class MyModel < ActiveRecord::Base has_attached_file :image, ... end 

Sur votre modèle, spécifiez simplement l'image en tant qu'URL, quelque chose comme ceci (écrit de manière délibérée):

 @my_model = MyModel.new image_url = params[:image_url] @my_model.image = URI.parse(image_url) 

Vous voudrez probablement mettre cela dans une méthode dans votre modèle. Cela fonctionnera également très bien sur le système de fichiers temporaire de Heroku.

Le trombone le prendra à partir de là.

source: documentation sur un trombone

Découvrez Net :: HTTP dans la bibliothèque standard. La documentation fournit plusieurs exemples sur la façon de télécharger des documents via HTTP.

Je pense que c’est la manière la plus claire:

 require 'open-uri' File.write 'image.png', open('http://example.com/image.png').read