Answers:
试试这个:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
IO.copy_stream(open('http://example.com/image.png'), 'destination.png')
require 'open-uri'
甚至更短的版本:
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]}")
如果您使用的是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的临时文件系统上也可以正常工作。
回形针将从那里拿走。
来源:回形针文档
在标准库中签出Net :: HTTP。该文档提供了一些有关如何使用HTTP下载文档的示例。
Kernel#open
它不仅使文件访问成为可能,而且还通过在管道符号(例如open("| ls")
)前添加前缀来处理调用。因此,通过对参数使用变量输入,可能会导致严重的安全风险Kernel#open
。