7

我正在尝试提取上传的 zip 文件并将其内容存储在数据库中,每个文件一个条目。rubyzip 库几乎没有有用的文档。

有一个 assets 表,它有 key :string (文件名)和 data :binary (文件内容)。

我正在使用 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}")

我不确定这些将如何工作,但也许它们会帮助您找到正确的方法(如果不是这样的话)。

而且,另一种选择:

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