Maison > développement back-end > Golang > le corps du texte

Comment puis-je décompresser efficacement des fichiers dans Go avec une gestion appropriée des erreurs et des considérations de sécurité ?

Linda Hamilton
Libérer: 2024-11-13 13:01:02
original
450 Les gens l'ont consulté

How can I efficiently unzip files in Go with proper error handling and security considerations?

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
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal