Me gustaría subir imágenes de las URL por clip en el almacenamiento S3. trabajo con:Paperclip: carga desde la url con la extensión
Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9
tengo mi modelo de la foto:
class Asset
has_attached_file :asset,
:styles => {:thumb => "60x60>"},
:storage => :s3,
:s3_credentials => "#{Rails.root}/config/s3.yml",
:path => "/pictures/:id/:style.:extension"
validates_attachment_content_type :asset, :content_type => ['image/gif', 'image/jpeg', 'image/png', 'image/x-ms-bmp']
end
Así que, básicamente Hice esto para descargar mi archivo desde una URL:
picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save
Pero guardo mi archivo con un bad file_name y no establece la extensión del archivo:
#<Asset id: 5, asset_file_name: "open-uri20120717-6028-1k3f7xz", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:41:40", updated_at: "2012-07-17 12:41:40">
p.asset.url
=> http://s3.amazonaws.com/my_assets_path/pictures/5/original.
Como puede ver, no hay extensión.
Encontré un método para resolverlo, pero estoy seguro de que puedo tener una mejor manera. Esta solución es copiar el archivo en mi equipo y luego se lo envío de S3 como esto:
filename = "#{Rails.root}/tmp/my_picture.jpg"
open(filename, 'wb') do |file|
file << open("http://www.my_url.com/my_picture.jpg").read
end
picture = Asset::Picture.new(asset: open(filename))
picture.save
Esto funciona en mi equipo:
#<Asset::Picture id: 10, asset_file_name: "my_picture.jpg", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:45:30", updated_at: "2012-07-17 12:45:30">
p.asset.url
=> "http://s3.amazonaws.com/assets.tests/my_assets_path/10/original.jpg"
Sin embargo, yo no sé si este método funcionará en Heroku (tengo mi aplicación en él).
¿No hay una forma mejor sin pasar por un archivo temporal?
¡Estás comprometido funciona como un encanto! Y ahora está incluido en el clip 3.1.4 Es lo que quería. ¡Muy buen trabajo! ¡Gracias! –
Confirmado, funciona muy bien con paperclip 3.1.4. Usted acaba de hacer mi día. ¡Gracias! –