2008-10-25 4 views
5

Я пытаюсь извлечь загруженный zip-файл и хранить его содержимое в базе данных, по одной записи на файл. В библиотеке rubyzip почти нет полезной документации.Как получить содержимое zipped-файла с помощью библиотеки rubyzip?

Существует таблица активов, в которой есть ключ: строка (имя файла) и данные: двоичный (содержимое файла).

Я использую библиотеку rubyzip, и сделали это, насколько это:

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? Должен ли я использовать временный файл?

ответ

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) 
+0

Спасибо. 10 баллов за усилия! – jcoby 2008-10-25 18:59:44

9

Обнаружили еще более простой способ:

asset.data = entry.get_input_stream.read 

 Смежные вопросы

  • Нет связанных вопросов^_^