Veuillez me suggérer un moyen de sauvegarder une image à partir d'une URL par Paperclip.
119
Veuillez 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
Puis simplement:
user.picture_from_url "http://www.google.com/images/logos/ps_logo2.png"
update_attributes
renommerpicture_from_url
enpicture_url=(value)
par exemple.user.picture_from_url('/etc/password')
. C'est probablement bien dans la plupart des situations.open(url)
, le nom de fichier n'est pas précis, par exempleopen-uri20150106-10034-lpd5fm.
au lieu deef3a601e_ef3d008b_ef3d0f7e.jpg
.Dans Paperclip 3.1.4, c'est devenu encore plus simple.
C'est légèrement mieux que open (url). Parce qu'avec open (url), vous obtiendrez "stringio.txt" comme nom de fichier. Avec ce qui précède, vous obtiendrez un nom correct du fichier en fonction de l'URL. c'est à dire
la source
application/octet_stream
commecontent_type
.Cela n'a pas fonctionné pour moi jusqu'à ce que j'utilise "open" pour l'URI analysé. une fois que j'ai ajouté "ouvert", cela a fonctionné!
Ma version trombone est la 4.2.1
Avant de l'ouvrir, il ne détectait pas le type de contenu correctement, 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.
la source
Commencez par télécharger l'image avec la
curb
gemme dans aTempFile
, puis attribuez simplement l'objet tempfile et enregistrez votre modèle.la source
Cela peut vous être utile. Voici le code utilisant un trombone et une image présente dans l'URL distante.
Dans le modèle
la source
Comme ce sont des anciennes réponses, voici une nouvelle:
Ajouter l'URL d'image distante à votre contrôleur souhaité dans la base de données
Modifier votre modèle
* Dans Rails4, vous devez ajouter l'attr_accessible dans le contrôleur.
Mettez à jour votre formulaire si vous autorisez d'autres personnes à télécharger une image à partir d'une URL
la source
super
?super
est utilisée pour invoquer la méthode d'origine, la recherche du corps de la méthode commence dans la super classe de l'objet qui contient la méthode d'origineC'est une méthode hardcore:
où Uuid.uuid crée juste un identifiant aléatoire.
la source
La documentation officielle est rapportée ici https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL
Quoi qu'il en soit, il ne semble pas mis à jour, car dans la dernière version de paperclip quelque chose a changé et cette ligne de code n'est plus valide:
Cela soulève une erreur, en particulier cette erreur est déclenchée:
La nouvelle syntaxe correcte est celle-ci:
Nous devons également ajouter ces lignes dans le fichier config / initializers / paperclip.rb :
Testé cela avec la version trombone
5.3.0
et cela fonctionne.la source