我正在尝试下载一个zip文件,提取zip并读取文件。下面是我的代码片段:
url = "http://localhost/my.zip"
response = RestClient::Request.execute({:url => url, :method => :get, :content_type => 'application/zip'})
zipfile = Tempfile.new("downloaded")
zipfile.binmode #someone suggested to use binary for tempfile
zipfile.write(response)
Zip::ZipFile.open(zipfile.path) do |file|
file.each do |content|
data = file.read(content)
end
end
当我运行这个脚本时,我看到下面的错误:
zip_central_directory.rb:97:in `get_e_o_c_d': Zip end of central directory signature not found (Zip::ZipError)
我不能理解这个错误是什么?我可以从zip文件url下载并查看压缩文件
无法让下载与Restclient一起工作,所以我使用net/http代替,测试和工作。使用tempfiles和Zip在过去给我带来了麻烦,所以我宁愿使用普通文件。您可以稍后删除。
require 'net/http'
require 'uri'
require 'zip/zip'
url = "http://localhost/my.zip"
uri = URI.parse(url)
req = Net::HTTP::Get.new(uri.path)
filename = './test.zip'
# download the zip
File.open(filename,"wb") do |file|
Net::HTTP::Proxy(proxy_host, proxy_port, proxy_user, proxy_pass).start(uri.host, uri.port) do |http|
http.get(uri.path) do |str|
file.write str
end
end
end
# and show it's contents
Zip::ZipFile.open(filename) do |zip|
# zip.each { |entry| p entry.get_input_stream.read } # show contents
zip.each { |entry| p entry.name } # show the name of the files inside
end
我怀疑你有一个损坏的zip文件。解压缩找不到标记存档结束的代码行,所以要么:
- 文件已损坏。
- 不是.zip文件。
- 归档文件有多个部分。