Escribí un código simple que toma la url de una imagen y carga una versión de tamaño reducido a la de Amazon S3. El código se ve así:Rails 3, clip de papel y cargar imagen desde la url remota
attr_accessor :profile_image_url
has_attached_file :avatar,
:default_url => "/system/avatars/:style_default.png",
:styles => {
:original => "128x128#",
:thumb => "48x48#"
},
:storage => :s3,
:s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
:path => "/avatars/:id/:style.:extension"
before_validation :download_profile_pic
...
def download_profile_pic
begin
io = open(URI.parse(self.profile_image_url))
def io.original_filename; base_uri.path.split('/').last; end
self.avatar = io.original_filename.blank? ? nil : io
rescue Timeout::Error
self.avatar = nil
rescue OpenURI::Error => e
self.avatar = nil
end
end
Funciona, pero las imágenes se cargan en una calidad muy baja. ¿Qué podría ser un problema?
su imagen original se convertirá en "128x128" px, ¿es su intención? definir baja calidad, en tasa de compresión? – andrea
esto es correcto - mis dimensiones de la imagen original son "128x128", y he intentado definir la calidad haciendo algo así: style => {: thumb => {: quality => 100, ...}} y aún así regresó mismo resultado – spacemonkey
¡Oye, esto funciona genial! Me preguntaba, ¿podría explicar el 'def io.original_filename'; base_uri.path.split ('/'). last; terminar la línea un poco? ¿Estás declarando una función aquí? y para que sirve el punto y coma? – TenJack