Dans Rails, puis-je vérifier si un fichier zip téléchargé est corrompu ou invalide ?
-
24-12-2019 - |
Question
J'ai une application Ruby dans laquelle les pigistes peuvent effectuer des tâches pour un employeur.Une fois le travail terminé, le pigiste peut télécharger des fichiers que l'employeur pourra examiner.Je pense que le pigiste devrait pouvoir télécharger des fichiers zip, mais je ne veux pas qu'il puisse télécharger des fichiers zip invalides ou corrompus.Existe-t-il un moyen d'arrêter cela ou de vérifier si un fichier est valide.Je suis presque sûr que s'il existe une méthode ou une fonction pour faire cela, elle sera dans la bibliothèque rubyzip, mais j'ai parcouru leur documentation et je ne trouve pas ce que je cherche.
La solution
Voici une solution naïve qui tente d'ouvrir une archive Zip, renvoyant true
si ça a marché et false
si une erreur s'est produite :
require 'zip'
def valid_zip?(file)
zip = Zip::File.open(file)
true
rescue StandardError
false
ensure
zip.close if zip
end
Je crois que le format ZIP inclut les sommes de contrôle CRC32 de son contenu.Si vous avez vraiment besoin que ce soit ultra rapide, vous pouvez les lire dans le fichier et vérifier par rapport à la somme de contrôle que vous avez calculée.
Autres conseils
Un autre moyen facile serait de simplement vérifier avec cette condition, si le fichier est en cours de téléchargement.
file = params[:file]
file.content_type.in?(['application/zip'])