2

大量のファイルを圧縮する貴重なコードがいくつかありました.tmpファイルシステムにzipファイルを作成し、そこにファイルを追加しました。

自分で手動で tmp ディレクトリに書き込んで後で削除するのではなく、ruby の Tempfile を使用してファイルをコードに保存することで、より効率的にしようとしています。

私はそれを試してみるためにこのコードを書きました…</p>

def zip_up_files
  require 'zip/zip'

  t = Tempfile.new(["temp-filename-#{export_type}", '.zip'], :type => 'application/zip')
  Zip::ZipOutputStream.open(t.path) do |z|
    #pop some files in the zip...
  end

  #save it to the has_attachment :download on the model
  self.download = File.open(t.path)
  self.save

  #delete TempFile...
  t.close
end

この成功により、Tempfile がモデルの .download に保存されました。ただし、保存された zip ファイルに移動すると、それは zip ファイルではなく、文字化けしたテキスト ドキュメントです。modleに保存される前に、zipの作成または保存に欠けているものがあるのではないかと思っていました。タイプをTempFile作成に入れてみました。zip に MimeType がないようです。よくわからないのですが、誰か助けてくれませんか?

ありがとう!

4

2 に答える 2

1

ファイル名が正しく生成されていないと思います

t = Tempfile.new(["temp-filename-#{export_type}", '.zip'], :type => 'application/zip')

この行の後にできること

   p t.path 

ターミナルで印刷された値を確認します

また

これに一致するようにコードを更新できます

    require 'zip/zip'
    Zip::ZipFile.open("my.zip", Zip::ZipFile::CREATE) {
     |zipfile|
      #do some awesome staff
     }
于 2013-04-25T11:04:38.860 に答える