В рельсах, могу ли я проверить, будет ли загруженный ZIP-файл поврежден или недействителен?

StackOverflow https://stackoverflow.com//questions/22079749

Вопрос

У меня есть приложение 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'])
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top