Alo*_*ain 189 ruby ruby-on-rails file-handling
我有一个图像的URL,我想在本地保存,以便我可以使用Paperclip为我的应用程序生成缩略图.下载和保存图像的最佳方法是什么?(我查看了ruby文件处理,但没有遇到任何问题.)
Lev*_*evi 306
试试这个:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Run Code Online (Sandbox Code Playgroud)
Cle*_*elm 133
更短的版本:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Run Code Online (Sandbox Code Playgroud)
要保持相同的文件名:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Run Code Online (Sandbox Code Playgroud)
sup*_*ary 29
如果您正在使用PaperClip,则现在可以自动处理从URL下载.
假设你有类似的东西:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
Run Code Online (Sandbox Code Playgroud)
在你的模型上,只需将图像指定为URL,就像这样(用有意的手写):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
Run Code Online (Sandbox Code Playgroud)
您可能希望将其放在模型中的方法中.这对Heroku的临时文件系统也可以正常工作.
Paperclip将从那里拿走它.
来源:回形针文档
use*_*745 13
可能是最简单的方法:
require 'open-uri'
image_url = "https://i.imgur.com/ZWnhY9T.png"
IO.copy_stream(URI.open(image_url), 'destination.png')
Run Code Online (Sandbox Code Playgroud)
Sag*_*oss 12
我认为这是最明确的方式:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
Run Code Online (Sandbox Code Playgroud)
查看标准库中的Net :: HTTP.该文档提供了有关如何使用HTTP下载文档的几个示例.