Vorrei caricare le immagini dagli URL di paperclip sull'archivio S3. Io lavoro con:Paperclip: upload dall'URL con l'estensione
Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9
ho il mio Modello Immagine:
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
Quindi, in pratica ho fatto questo per scaricare il mio file da un URL:
picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save
Ma salvare il mio file con un file_name errato e non imposta l'estensione del file:
#<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.
Come potete vedere non c'è un'estensione.
Ho trovato un metodo per risolverlo ma sono sicuro che posso avere un modo migliore. Questa soluzione è quella di copiare il file sul mio computer e poi mando su S3 in questo modo:
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
Questo funziona sul mio computer:
#<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"
Tuttavia non so se questo metodo funzionerà su Heroku (ospito la mia app su di esso).
Non c'è un modo migliore senza passare da un file temporaneo?
Sei commettere funziona come un fascino! Ed è ora incluso in paperclip 3.1.4 È quello che volevo. Davvero un buon lavoro! Grazie! –
Confermato, funziona alla grande con paperclip 3.1.4. Mi hai migliorato la giornata. Grazie! –