Heim > Backend-Entwicklung > Golang > Wie entpacke ich Dateien in Go einfach mit dem „zip'-Paket?

Wie entpacke ich Dateien in Go einfach mit dem „zip'-Paket?

Mary-Kate Olsen
Freigeben: 2024-11-13 05:57:02
Original
725 Leute haben es durchsucht

How to Easily Unzip Files in Go with the `zip` Package?

Entpacken leicht gemacht mit Go

Das Entpacken von Dateien in Go ist mit dem Zip-Paket ein Kinderspiel. Dank seiner Einfachheit können Sie eine Dienstprogrammfunktion wie diese erstellen:

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)

    // Closure isolates file descriptor .Close() calls
    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)
            }
        }()

        path := filepath.Join(dest, f.Name)

        // Prevent ZipSlip vulnerability
        if !strings.HasPrefix(path, filepath.Clean(dest)+string(os.PathSeparator)) {
            return fmt.Errorf("illegal file path: %s", path)
        }

        if f.FileInfo().IsDir() {
            os.MkdirAll(path, f.Mode())
        } else {
            os.MkdirAll(filepath.Dir(path), f.Mode())
            f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, f.Mode())
            if err != nil {
                return err
            }
            defer func() {
                if err := f.Close(); err != nil {
                    panic(err)
                }
            }()

            _, err = io.Copy(f, rc)
            if err != nil {
                return err
            }
        }
        return nil
    }

    for _, f := range r.File {
        err := extractAndWriteFile(f)
        if err != nil {
            return err
        }
    }

    return nil
}
Nach dem Login kopieren

Dieser Code durchläuft sorgfältig jede Datei im ZIP-Archiv, behandelt Verzeichnisse und reguläre Dateien angemessen und stellt gleichzeitig die Gültigkeit des Dateipfads sicher. Beachten Sie, dass der Abschlussansatz unnötiges Verzögerungsstapeln eliminiert, die Kapselung verbessert und die Fehlerbehandlung rationalisiert.

Das obige ist der detaillierte Inhalt vonWie entpacke ich Dateien in Go einfach mit dem „zip'-Paket?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage