Tôi muốn tải hình ảnh từ URL bằng kẹp giấy lên bộ nhớ S3. tôi làm việc với:Kẹp giấy: tải lên từ url có phần mở rộng
Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9
Tôi có Hình mẫu của tôi:
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
Vì vậy, về cơ bản tôi đã thực hiện này để tải tập tin của tôi từ một URL:
picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save
Nhưng nó lưu tập tin của tôi với một file_name sai và nó không đặt phần mở rộng của tập tin:
#<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.
Như bạn thấy không có phần mở rộng.
Tôi đã tìm thấy một phương pháp để giải quyết nó nhưng tôi chắc chắn rằng tôi có thể có một cách tốt hơn. Giải pháp này là để sao chép các tập tin trên máy tính của tôi sau đó tôi gửi nó trên S3 như thế này:
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
này hoạt động trên máy tính của tôi:
#<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"
Tuy nhiên tôi không biết nếu phương pháp này sẽ làm việc trên Heroku (tôi lưu trữ ứng dụng của tôi trên đó).
Không có cách nào tốt hơn nếu không vượt qua một tệp tạm thời?
Bạn cam kết hoạt động như một sự quyến rũ! Và nó bây giờ được bao gồm trong kẹp giấy 3.1.4 Đó là những gì tôi muốn. Làm tốt lắm! Cảm ơn bạn! –
Xác nhận, hoạt động tốt với kẹp giấy 3.1.4. Bạn đã làm ngày hôm nay của tôi trở nên thú vị. Cảm ơn bạn! –