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.

Était-ce utile?

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'])

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top