0

我有一堆记录需要转换为 XML,然后压缩成一个文件,这样我就可以将它发送到期望所述记录的服务器上。我遇到的问题是服务器只能接受小于给定数量的文件.. 让我们说 10 Megs

    require 'zip/zip'    
    Zip::ZipOutputStream.open("tmp/myfile_#{Process.pid}.zip") do |zos|
      i_xml.each_with_index do |xml, index|
        zos.put_next_entry("#{index}.xml")
        zos << xml
      end
    end 

上面的代码完美地创建了 zip 文件。但我不知道如何获得压缩后的大小。

我可以为 zip header 和其他东西提供一些余地。所以一旦我知道我的输出有多大,我就可以修补。它只是得到这个大小似乎不在这个类的卡片中。

注意:我已经尝试安装 zipRuby,因为它有一个压缩大小的方法,但这只会让我陷入另一个兔子洞......本机扩展等。

4

1 回答 1

0

在 Zip 库中看不到任何执行此操作的内容,抱歉。

考虑一下,如果可以的话:

  • 进一步推动 zipRuby 编译
  • 使用简单的 File.read 语句将完成的 zip 文件分成固定大小的块,然后将这些块重新放在服务器上。
  • 通过限制添加的文件数量来限制 zip 文件的大小,例如添加文件直到超过文件大小限制,然后删除最后添加的文件并将其添加到新的 zip 文件中
于 2012-04-18T06:45:26.657 回答