通过CURL下载Zip文件并保存到实际的文件结构中

4
我正在尝试使用RubyGem Curb构建文件下载器。 (请参考此问题。)
我正在尝试下载一个zip文件, 然后使用File类来实际生成该文件,以便我可以在Finder中双击它(我在OS X上)。如何将此"Curl"的主题转换为zip文件。
require 'rubygems'
require 'curb'

class Download
  def start
    curl = Curl::Easy.new('http://wordpress.org/latest.zip')
    curl.perform
    curl.on_body {
      |d| f = File.new('test.zip', 'w') {|f| f.write d}
    }
  end
end

dl = Download.new
dl.start

我没有收到任何错误提示,也找不到任何文件。我已经尝试了绝对路径,但没有任何区别。


1
在调用 perform 传输正文之后,您正在添加 on_body 事件。如果在调用 curl.perform 之前创建该事件,代码是否能够正常工作? - Jon Gauthier
当然,我必须在perform之前调用on_body。我还必须将File.new参数“'w'”更改为“'a'”。 - maetthew
太好了,很高兴问题得到解决。我也会将此作为答案添加,以便其他人可以轻松找到解决方案 :) - Jon Gauthier
@maetthew,你能把答案标记为好吗? - Tim Snowhite
@Tim Snowwhite @Hans Engel 我正想让你把它发布为答案,很好你比我先做到了 :) 已确认为已回答。 - maetthew
2个回答

4

我正在使用Ruby 2.0版本

我的代码如下:

curl = Curl::Easy.new('http://somepage.cz/index.html')
curl.on_body do |d|
  f = File.open('output_file.html', 'w') {|f| f.write(d)}
end
curl.perform

我必须将File.new更改为File.open,否则它无法正常工作。 将curl.perform移动到末尾确实帮助了我。


2

在调用 perform 方法之后,您正在添加 on_body 事件,该事件传输正文。如果将事件声明移动到 perform 调用之前,则应该可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接