我有一个要在本地保存的图像的 URL,以便我可以使用 Paperclip 为我的应用程序生成缩略图。下载和保存图像的最佳方式是什么?(我研究了 ruby 文件处理,但没有遇到任何问题。)
问问题
152255 次
7 回答
328
尝试这个:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
于 2010-03-25T16:19:47.653 回答
170
更短的版本:
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]}")
于 2015-04-20T09:00:48.643 回答
32
如果您使用的是 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 的临时文件系统上也可以正常工作。
回形针会从那里拿走它。
来源:回形针文档
于 2013-03-05T15:27:56.570 回答
16
我认为这是最清晰的方法:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
于 2017-10-01T20:12:58.213 回答
11
查看标准库中的Net::HTTP。该文档提供了几个有关如何使用 HTTP 下载文档的示例。
于 2010-03-25T13:42:17.017 回答
4
可能是最简单的方法:
require 'open-uri'
image_url = "https://i.imgur.com/ZWnhY9T.png"
IO.copy_stream(URI.open(image_url), 'destination.png')
于 2020-12-19T14:18:09.310 回答
0
上面所有的例子都很棒。就我而言,我只想从 URL 中的图像创建一个下载链接。
如果您想让它可下载(到您的下载文件夹),您可以在控制器中使用以下代码:
require 'open-uri'
file_type = url.to_s.split(".")[-1]
send_data open(url).read, filename: "some_name.#{file_type}", type: "image/#{file_type}", disposition: "attachment"
于 2021-08-24T09:18:57.717 回答