Ruby:读取临时zip文件

时间:2012-10-25 19:55:52

标签: ruby zip temporary-files

我有一个TempFile对象是一个zip文件,我想从中读取如下:

Zip::ZipFile.open_buffer(tempfile) do |zipfile|
    ...
end

然而,当我这样做时,我收到以下错误:

Zip::ZipFile.open_buffer expects an argument of class String or IO. Found: Tempfile

我也试过

Zip::ZipFile.open(tempfile.path) do |zipfile|
    ...
end

但是返回

can't dup NilClass

如何处理临时zip文件?

3 个答案:

答案 0 :(得分:3)

请参阅以下文章http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/,其中介绍了如何使用更基本的接口Zip :: ZipOutputStream(如果使用Tempfile

答案 1 :(得分:2)

事实证明临时文件已损坏,所以

can't dup NilClass

错误是因为尝试读取损坏的文件。

因此解决方案是使用

Zip::ZipFile.open(tempfile.path) do |zipfile|
    ...
end

答案 2 :(得分:0)

我遇到了同样的错误,但在挖掘后我发现这些zip文件应该是二进制文件

,首先将它们以二进制模式复制到某个文件,然后您可以使用ZIP模块解压缩它而不会遇到错误

示例代码

#copying zip file to a new file in binary mode

filename = "empty.zip" 
File.open(filename, "wb") do |empty_file|
  open("#{zipfile_url}", 'rb') do |read_file|
    empty_file.write(read_file.read)
  end
end

#now you can open the zip file

Zip::File.open(filename) do |f|
  . . .
end