纸夹:如何在Rails控制台中存储图片?

38

我尝试在Rails控制台中存储本地图像。

因为我有很多图片存储在本地(我使用爬虫下载了大量图片),我希望将它们存储到数据库中,借助 Paperclip 进行一些图像处理工作,如缩略图等。 如果我使用网页逐个保存新图片到数据库,这将耗费大量时间。所以我想在 Rails 控制台中找到一种批量将图片保存到数据库的方式(代码)。


我建议您在提问时花更多时间,包括您尝试过什么以及为什么要使用“控制台”存储本地图像......通过自己花费更多时间,您将获得更高的回复机会。 - Jesse Wolgamott
4个回答

56
为了进一步澄清@andrea的答案: YourPaperclippedModelHere.new(:your_paperclip_field => File.new(path, "r")) 因此,如果您的模型名为Image,而您的Paperclip字段为data: Image.new(:data => File.new(path_to_your_file, "r"))

19
如果这是模型:
class User < ActiveRecord::Base
  has_attached_file :avatar
end

那么从控制台运行以下内容应该可以正常工作:

>> User.create(:avatar => File.open('/path/to/image.jpg', 'rb'))

对于那些感到好奇的人来说,在File.open参数中的 'rb''r' 是可以互换使用的,详情请见:https://dev59.com/C2w05IYBdhLWcg3wsz0l#7085623。 - Joshua Pinter

2
我不确定这是否是你想要的...但是要在控制台上保存一个纸夹资产,你可以简单地使用一个文件实例。 例如:
Image.new :data=>File.new("/path/to/image.jpg","r")

ruby-1.9.2-p0 > Image.new NameError: 未初始化常量Image from (irb):2 from /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:44:in start' from /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands/console.rb:8:in start' from /home/mlzboy/.rvm/gems/ruby-1.9.2-p0/gems/railties-3.0.1/lib/rails/commands.rb:23:in <top (required)>' from script/rails:6:in require' from script/rails:6:in `<main>' - mlzboy
我尝试在Rails控制台中使用Image.new,但它引发了类似上面的错误。 - mlzboy
在这种情况下,File.new不起作用,您应该尝试使用以下代码:Image.create(:data => File.open('/path/to/image.jpg', 'r')) - Magesh
对于未来的读者:Image并没有内置在Ruby或Rails中;它是一个模型,就像应用程序中的UserPost一样需要定义。这里的Image被用作ActiveRecord模型的示例。 - Luke Griffiths

2
晚回复,但希望对其他人有帮助。 您需要包含以下内容:File.new("#{Rails.root}/public/images/default_avatar.png", "r")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接