2009-06-04 3 views
3

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

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

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

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

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

Спасибо. Joerg

ответ

4

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

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

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

4

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

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

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

Да, я обычно делаю это асинхронно, но в этом конкретном случае файл не разрешается сохранять первым. Это внутренняя система, в которой есть только несколько человек, имеющих доступ к ней. Спасибо хоть. – Joerg

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

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