0

XML に変換してファイルに圧縮する必要があるレコードの山があるので、そのレコードを期待しているサーバーに送信できます。私が抱えている問題は、サーバーが特定の量よりも小さいファイルしか受け入れることができないということです..議論のために10メガとしましょう

    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 ヘッダーなどにいくらか余裕を持たせることができます。ですから、出力の大きさがわかれば、いじくり回すことができます。このクラスのカードにはサイズがないようです。

注: zipRuby には圧縮サイズ メソッドがあるため、インストールしようとしましたが、それは別のウサギの穴につながるだけです..ネイティブ拡張機能など。

4

1 に答える 1

0

これを行うための Zip ライブラリには何もありません。申し訳ありません。

可能であれば、次のことを検討してください。

  • zipRubyをコンパイルしてさらにプッシュ
  • 単純な File.read ステートメントを使用して、完成した zip ファイルを固定サイズのチャンクに分割し、サーバーでチャンクを元に戻します。
  • 追加するファイルの数を制限して zip ファイルのサイズを制限します。たとえば、ファイル サイズの制限を超えるまでファイルを追加し、最後に追加したファイルを削除して新しい zip ファイルに追加します。
于 2012-04-18T06:45:26.657 に答える