В рельсах, могу ли я проверить, будет ли загруженный ZIP-файл поврежден или недействителен?
-
24-12-2019 - |
Вопрос
У меня есть приложение Ruby, в котором фрилансеры могут выполнять работу для работодателя.Когда работа завершена, фрилансер может загружать файлы для работодателя для просмотра.Я думаю, что фрилансер должен быть в состоянии загружать zip-файлы, но я не хочу, чтобы фрилансер сможет загрузить недействительные или поврежденные zip-файлы.Есть ли способ остановить это или проверить, действительно ли файл действителен.Я уверен, что если есть метод или функция для этого, он будет в библиотеке Rubyzip, но я просмотрел свою документацию и не могу найти то, что я ищу.
Решение
Вот наивный раствор, который пытается открыть ZIP-архив, возвращая генеракодицетагCode, если он сработал, и произошел генеракодицетагCode, если произошла ошибка:
require 'zip'
def valid_zip?(file)
zip = Zip::File.open(file)
true
rescue StandardError
false
ensure
zip.close if zip
end
.
Я полагаю, что формат ZIP включает контрольные суммы CRC32 его содержимого.Если вам действительно нужно, чтобы он был очень быстрым, вы можете прочитать из файла и проверять начнутую контрольную сумму.
Другие советы
Еще одним простым способом было бы просто проверить с этим условием, если файл загружен.
file = params[:file]
file.content_type.in?(['application/zip'])
.