No rails, posso verificar se um upload de arquivo zip está corrompido ou é inválido?
-
24-12-2019 - |
Pergunta
Eu tenho um rubi aplicativo no qual freelancers pode concluir os trabalhos para um empregador.Quando o trabalho completo, o freelancer pode fazer o upload de arquivos para o empregador revisão.Eu acho que o freelancer deve ser capaz de fazer upload de arquivos zip, mas eu não quero que o freelancer para ser capaz de carregar inválido ou corrompido arquivos zip.Existe alguma maneira de parar este ou verificar se um arquivo é válido.Im certeza se há um método ou uma função para fazer isso, ele vai estar no rubyzip biblioteca, mas eu olhei através do seu documentação e não consegue encontrar o que estou procurando.
Solução
Aqui é um ingênuo solução que tenta abrir um arquivo Zip, retornando true
se ele trabalhou e false
se um erro ocorreu:
require 'zip'
def valid_zip?(file)
zip = Zip::File.open(file)
true
rescue StandardError
false
ensure
zip.close if zip
end
Eu acredito que o formato ZIP inclui as somas de verificação CRC32 do seu conteúdo.Se você realmente precisa dele para ser super rápido, você pode ler os que estão fora do arquivo e verifique o checksum você ter calculado.
Outras dicas
Outra forma fácil seria apenas verificar com esta condição, se o arquivo está sendo carregado.
file = params[:file]
file.content_type.in?(['application/zip'])