En los rieles, ¿puedo verificar si un archivo postal cargado está dañado o inválido?
-
24-12-2019 - |
Pregunta
Tengo una aplicación de rubí en la que los freelancers pueden completar los trabajos para un empleador.Cuando se complete el trabajo, el Freelancer puede cargar archivos para que el empleador revise.Creo que el freelancer debería poder cargar archivos ZIP, pero no quiero que el Freelancer pueda cargar archivos ZIP no válidos o corruptos.¿Hay alguna forma de detener esto o verificar si un archivo es válido?Estoy bastante seguro de si hay un método o función para hacer esto, estará en la biblioteca de Rubyzip, pero he visto su documentación y no puedo encontrar lo que estoy buscando.
Solución
Aquí hay una solución ingenua que intenta abrir un archivo ZIP, devolviendo true
si funciona y false
si se produjo un error:
require 'zip'
def valid_zip?(file)
zip = Zip::File.open(file)
true
rescue StandardError
false
ensure
zip.close if zip
end
Creo que el formato ZIP incluye las sumas de suma de comprobación CRC32 de sus contenidos.Si realmente necesita que sea super rápido, podría leerlos fuera del archivo y verificar con la suma de comprobación que ha computado.
Otros consejos
Otra forma fácil sería simplemente consultar con esta condición, si se está cargando el archivo.
file = params[:file]
file.content_type.in?(['application/zip'])