J'ai une URL vers une image que je souhaite enregistrer localement, afin de pouvoir 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 examiné la gestion des fichiers rubis mais je n'ai rien trouvé.)
ruby-on-rails
ruby
file-handling
Alok Swain
la source
la source
IO.copy_stream(open('http://example.com/image.png'), 'destination.png')
require 'open-uri'
simplement utilisé le code en dessousUne version encore plus courte:
Pour conserver le même nom de fichier:
la source
Si vous utilisez PaperClip, le téléchargement à partir d'une URL est désormais géré automatiquement.
En supposant que vous avez quelque chose comme:
Sur votre modèle, spécifiez simplement l'image en tant qu'URL, quelque chose comme ceci (écrit à la main délibérément):
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.
Un trombone le prendra à partir de là.
source: documentation trombone
la source
Je pense que c'est la manière la plus claire:
la source
Découvrez Net :: HTTP dans la bibliothèque standard. La documentation fournit plusieurs exemples sur la façon de télécharger des documents à l'aide de HTTP.
la source
Kernel#open
permet non seulement l'accès aux fichiers mais également le processus d'appel en préfixant un symbole de canal (par exemple,open("| ls")
). Ainsi, cela peut entraîner un risque de sécurité grave en utilisant l'entrée variable de l'argument deKernel#open
.