我正在尝试从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
答案 0 :(得分:0)
看起来你正在使用rubyzip,它无法从内存缓冲区中解压缩。
您可能希望查看使用Chilkat's Ruby Zip Library,因为它支持zip数据的内存处理。它声称能够“创建或打开内存中的Zips”,尽管我自己没有使用过该库的经验。但是,Chilkat的图书馆不是免费的,所以这可能是一个考虑因素。不确定是否有免费的库具有此功能。
答案 1 :(得分:0)
一种方法可能是实现内存中的文件,这样RubyZip仍然可以在不改变任何内容的情况下使用你的文件。
你应该看看this Ruby Hack