2013-08-27 67 views
18

我发现NET :: HTTP的good examples用于下载图像文件,并且我发现了创建临时文件的good examples。但我不明白我可以如何将这些库一起使用。也就是说,如何将临时文件的创建用于下载二进制文件的代码?如何通过HTTP将图像文件下载到临时文件中?

require 'net/http' 

Net::HTTP.start("somedomain.net/") do |http| 
    resp = http.get("/flv/sample/sample.flv") 
    open("sample.flv", "wb") do |file| 
     file.write(resp.body) 
    end 
end 
puts "Done." 
+0

@maerics,我更新了e question - – Dogweather

+0

您是否正确提交编辑?我怀疑,否则你的代码看起来像你的第一个例子的直接副本。 – Shadwell

+0

当你用Tempfile文档读取的内容替换'open(“sample.flv”)...'部件会发生什么? – maerics

回答

12
require 'net/http' 
require 'tempfile' 
require 'uri' 

def save_to_tempfile(url) 
    uri = URI.parse(url) 
    Net::HTTP.start(uri.host, uri.port) do |http| 
    resp = http.get(uri.path) 
    file = Tempfile.new('foo', Dir.tmpdir, 'wb+') 
    file.binmode 
    file.write(resp.body) 
    file.flush 
    file 
    end 
end 

tf = save_to_tempfile('http://a.fsdn.com/sd/topics/transportation_64.png') 
tf # => #<File:/var/folders/sj/2d7czhyn0ql5n3_2tqryq3f00000gn/T/foo20130827-58194-7a9j19> 
+2

请把需要包含的'require xxx'运行这个代码.. –

+0

现在好了!这使得答案明确.. * + 1 * .. –

+4

有趣。我得到一个编码错误在Rails中运行ruby 2.0:Encoding :: UndefinedConversionError:“\ x89”从ASCII-8BIT到UTF-8 – Dogweather

38

还有更多的API友好的库比Net::HTTP,例如httparty

require "httparty" 

url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/91/DahliaDahlstarSunsetPink.jpg/250px-DahliaDahlstarSunsetPink.jpg" 

File.open("/tmp/my_file.jpg", "wb") do |f| 
    f.write HTTParty.get(url).body 
end 
+0

在答案中给出了Ruby gem链接.. –

+0

谢谢;我正在寻找像这样的二进制模式下的httparty示例。 – Dogweather

+0

@Babai完成! :) – fguillen

7

我喜欢用RESTClient实现:

file = File.open("/tmp/image.jpg", 'wb') do |output| 
    output.write RestClient.get("http://image_url/file.jpg") 
    end 

干净,清晰

相关问题