Открытие многокомпонентного файла / файла данных формы с помощью rubyzip - PullRequest
3 голосов
/ 04 июня 2009

Я хочу извлечь файлы из ZIP-файла, загруженного в приложение Rails. Файлы в ZIP-файле будут сохранены в базе данных.

Я хочу открыть ZIP-файл в своем действии, без необходимости сначала сохранять файл в папке - я хочу открыть поток multipart / form-data с помощью rubyzip.

Похоже, что ZipFile.open от rubyzip принимает только имя файла, а не поток ввода-вывода.

Что мне нужно изменить в rubyzip, чтобы позволить мне открывать zip-файл в виде потока, например:

Zip::ZipFile.open(params["zip_file"]) do |zip_file|
 ...
end

Спасибо. Йорг

Ответы [ 2 ]

4 голосов
/ 06 ноября 2009

Использование

Zip::ZipFile.open(params["zip_file"].path) do |zip_file|
 ...
end

должно работать.

4 голосов
/ 04 июня 2009

Я дам вам совет, который вы не просили.

Я бы настоятельно рекомендовал вам не выполнять эту операцию изнутри вашего действия, потому что оно заблокирует процесс Rails, связанный с этим HTTP-запросом, на время, необходимое для выполнения извлечения. Ваш пользовательский интерфейс для этого пользователя перестанет отвечать на запросы, и если достаточное количество пользователей сделает это одновременно (вы ограничиваете размер загружаемого файла, верно?), То вы фактически получаете атаку Отказ в обслуживании на ваше приложение.

  • Инициируйте извлечение как асинхронное фоновое задание из вашего действия.
...