从GET请求中读取zip文件而不先保存在Ruby中?

时间:2009-07-07 22:13:13

标签: ruby zip

我正在尝试从HTTP GET请求读取zip文件。一种方法是通过 首先将响应主体保存到物理文件然后再读取 zip文件来读取zip中的文件。

有没有办法直接读取里面的文件而无需保存 首先将zip文件转换为物理文件?

我目前的代码:

Net::HTTP.start("clinicaltrials.gov") do |http|
  resp = http.get("/ct2/results/download?id=15002A")
  open("C:\\search_result.zip", "wb") do |file|
    file.write(resp.body)
  end
end

Zip::ZipFile.open("C:\\search_result.zip") do |zipfile|
  xml = zipfile.file.read("search_result.xml")
end

2 个答案:

答案 0 :(得分:0)

看起来你正在使用rubyzip,它无法从内存缓冲区中解压缩。

您可能希望查看使用Chilkat's Ruby Zip Library,因为它支持zip数据的内存处理。它声称能够“创建或打开内存中的Zips”,尽管我自己没有使用过该库的经验。但是,Chilkat的图书馆不是免费的,所以这可能是一个考虑因素。不确定是否有免费的库具有此功能。

答案 1 :(得分:0)

一种方法可能是实现内存中的文件,这样RubyZip仍然可以在不改变任何内容的情况下使用你的文件。

你应该看看this Ruby Hack