Maison > Article > développement back-end > Comment puis-je décompresser efficacement des fichiers dans Go avec une gestion appropriée des erreurs et des considérations de sécurité ?
Décompressez des fichiers sans effort avec Go
Décompresser des fichiers dans Go est une tâche simple avec les bons outils. Le package zip dans Go fournit un moyen pratique d'extraire des fichiers des archives ZIP.
Code actuel
L'extrait de code fourni initialise un lecteur zip, parcourt les fichiers dans l'archive et les extrait vers la destination désignée. Les instructions de report imbriquées peuvent entraîner des problèmes, comme l'a noté @Nick Craig-Wood.
Solution améliorée
Pour résoudre ce problème, une fermeture est introduite pour encapsuler le logique d'extraction et d'écriture de fichiers. De plus, la gestion des erreurs est ajoutée aux appels Close() pour le lecteur zip et les lecteurs de fichiers individuels :
func Unzip(src, dest string) error { r, err := zip.OpenReader(src) if err != nil { return err } defer func() { if err := r.Close(); err != nil { panic(err) } }() os.MkdirAll(dest, 0755) extractAndWriteFile := func(f *zip.File) error { rc, err := f.Open() if err != nil { return err } defer func() { if err := rc.Close(); err != nil { panic(err) } }() ... (Code for file extraction and writing goes here) ... return nil } for _, f := range r.File { err := extractAndWriteFile(f) if err != nil { return err } } return nil }
Cette solution améliorée crée le répertoire de destination s'il n'existe pas et garantit une gestion appropriée des erreurs. pour tous les descripteurs de fichiers et le nettoyage de fermeture.
Considérations supplémentaires
Le code mis à jour inclut également la détection Zipslip pour empêcher le répertoire traversée et risques de sécurité potentiels associés à l'extraction de fichiers en dehors du chemin de destination désigné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!