7

アップロードされた zip ファイルを抽出し、その内容をデータベースに保存しようとしています。ファイルごとに 1 つのエントリです。rubyzip ライブラリには、有用なドキュメントがほとんどありません。

key :string (ファイル名) と data :binary (ファイルの内容) を持つ assets テーブルがあります。

私は ruby​​zip ライブラリを使用しており、これまでに作成しました:

Zip::ZipFile.open(@file_data.local_path) do |zipfile|
  zipfile.each do |entry|
    next if entry.name =~ /__MACOSX/ or entry.name =~ /\.DS_Store/ or !entry.file?

    asset = self.assets.build
    asset.key = entry.name
    asset.data = ??  # what goes here?
  end
end

ZipEntry からデータを設定するにはどうすればよいですか? 一時ファイルを使用する必要がありますか?

4

2 に答える 2

11

さらに簡単な方法を見つけました:

asset.data = entry.get_input_stream.read
于 2008-10-25T18:59:14.800 に答える
6

次のように read_local_entry メソッドを使用できるようです。

asset.data = entry.read_local_entry {|z| z.read }

または、次の方法でエントリを保存できます。

data = entry.extract "#{RAILS_ROOT}/#{entry.name}"
asset.data = File.read("#{RAILS_ROOT}/#{entry.name}")

それらがどのように機能するかはわかりませんが、適切な方法を見つけるのに役立つかもしれません (そうでない場合)。

そして、もう1つの選択肢:

asset.data = zipfile.file.read(entry.name)
于 2008-10-25T18:43:00.560 に答える