rails notidentifiedbyimagemagickerror errors active ruby-on-rails ruby upload paperclip

ruby on rails - notidentifiedbyimagemagickerror - Guardar imagen de URL con clip



rails carrierwave (7)

Aquí hay una manera simple:

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

Entonces simplemente:

user.picture_from_url "http://www.google.com/images/logos/ps_logo2.png"

Por favor sugiérame una forma de guardar una imagen de una URL con Paperclip.


Como esos son viejos Respuesta aquí hay uno más nuevo:

Agregar URL remota de imagen al controlador deseado en la base de datos

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

Edita tu modelo

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, debe agregar attr_accessible en el Controlador.

Actualice su formulario, si permite que otro cargue una Imagen desde una URL

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


En Paperclip 3.1.4 se ha vuelto aún más simple.

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

Esto es ligeramente mejor que abrir (url). Porque con open (url) obtendrás "stringio.txt" como nombre de archivo. Con lo anterior, obtendrá un nombre propio del archivo basado en la URL. es decir

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


Este es un método 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)

donde Uuid.uuid solo hace una identificación aleatoria.


No funcionó para mí hasta que usé "abierto" para el URI analizado. una vez que agregué "abrir" funcionó!

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

Mi versión de clip es 4.2.1

Antes de abrir, no detectaría el tipo de contenido correcto, porque no era un archivo. Diría image_content_type: "binary / octet-stream", e incluso si lo reemplazo con el tipo de contenido correcto, no funcionaría.


Primero descargue la imagen con la gema del curb a un TempFile y luego simplemente asigne el objeto del tempfile y guarde su modelo.


Puede ser útil para ti. Aquí está el código que usa clip y la imagen presente en la URL remota.

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

En modelo

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