gpt4 book ai didi

ruby-on-rails - 回形针:从带有扩展名的 url 上传

转载 作者:数据小太阳 更新时间:2023-10-29 06:39:04 26 4
gpt4 key购买 nike

我想通过 S3 存储上的回形针从 URL 上传图片。我与 :

Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9

我有我的图片模型:

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

所以基本上我做这个是为了从 URL 下载我的文件:

picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save

但是它用错误的文件名保存了我的文件,并且没有设置文件的扩展名:

#<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.

如您所见,没有扩展名。

我找到了解决它的方法,但我确信我可以有更好的方法。此解决方案是将文件复制到我的计算机上,然后像这样在 S3 上发送它:

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

这适用于我的电脑:

#<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"

但是我不知道这种方法是否适用于 Heroku(我在其上托管我的应用程序)。

不通过临时文件有没有更好的办法?

最佳答案

好时机。我刚刚发送了一个在几个小时前(2012 年 7 月 20 日)修补的拉取请求,这应该会让您的生活真正轻松。

self.asset = URI.parse("http://s3.amazonaws.com/blah/blah/blah.jpg")

这将下载您的 jpeg 图片,确保文件名是 blah.jpg 并且内容类型是 'image/jpg'

Paperclip 版本 > 3.1.3(在发布之前,您需要将其链接到 github 存储库)。

更新:确认使用回形针版本 >= 3.1.4

关于ruby-on-rails - 回形针:从带有扩展名的 url 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11523171/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com