如何从URL下载文件并将其保存在Rails中?

时间:2010-03-25 13:36:54

标签: ruby-on-rails ruby file-handling

我有一个图像的URL,我想在本地保存,以便我可以使用Paperclip为我的应用程序生成缩略图。下载和保存图像的最佳方法是什么? (我查看了ruby文件处理,但没有遇到任何问题。)

6 个答案:

答案 0 :(得分:294)

试试这个:

require 'open-uri'
open('image.png', 'wb') do |file|
  file << open('http://example.com/image.png').read
end

答案 1 :(得分:120)

更短的版本:

require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')

保持相同的文件名:

IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")

答案 2 :(得分:28)

如果您正在使用PaperClip,现在可以自动处理从URL下载。

假设你有类似的东西:

class MyModel < ActiveRecord::Base
  has_attached_file :image, ...
end

在你的模型上,只需将图像指定为URL,就像这样(用刻意的长手写):

@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)

您可能希望将其放入模型中的方法中。这对Heroku的临时文件系统也可以正常工作。

Paperclip会从那里拿走它。

来源:paperclip documentation

答案 3 :(得分:9)

我认为这是最明确的方式:

require 'open-uri'

File.write 'image.png', open('http://example.com/image.png').read

答案 4 :(得分:8)

查看标准库中的Net::HTTP。该文档提供了有关如何使用HTTP下载文档的几个示例。

答案 5 :(得分:2)

这可能是最简单的方法:

IO.copy_stream(URI.open("https://i.pinimg.com/originals/24/17/d6/2417d6b3f3dc236b0b5b80fb00b3a791.png"), 'destination.png')