5

我有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 文件?

4

3 回答 3

3

请参阅以下文章http://info.michael-simons.eu/2008/01/21/using-rubyzip-to-create-zip-files-on-the-fly/它解释了如何使用更基本的界面 Zip ::ZipOutputStream 如果您使用 Tempfile

于 2012-10-25T20:03:16.013 回答
2

原来是临时文件损坏了,所以

can't dup NilClass

错误是由于尝试读取损坏的文件造成的。

因此解决方案是使用

Zip::ZipFile.open(tempfile.path) do |zipfile|
    ...
end
于 2012-10-26T10:01:03.323 回答
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
于 2014-04-30T19:03:16.980 回答