Heim > Backend-Entwicklung > Golang > Wie erstelle ich mit Gin im Handumdrehen ein Zip/7z-Archiv auf einem HTTP-Server?

Wie erstelle ich mit Gin im Handumdrehen ein Zip/7z-Archiv auf einem HTTP-Server?

王林
Freigeben: 2024-02-09 08:40:20
nach vorne
703 Leute haben es durchsucht

如何使用 Gin 在 HTTP 服务器中即时生成 zip / 7z 存档?

PHP-Editor Apple bietet Ihnen eine kurze Anleitung zur Verwendung von Gin, um sofort ZIP/7Z-Archive auf HTTP-Servern zu generieren. Gin ist ein leichtes Go-Sprachframework mit hoher Leistung und Benutzerfreundlichkeit. In diesem Artikel erfahren Sie, wie Sie mit Gin HTTP-Anfragen verarbeiten und Zip- und 7z-Archivdateien durch Aufrufen von Systembefehlen und Bibliotheken von Drittanbietern generieren. Ganz gleich, ob Sie Anfänger oder erfahrener Entwickler sind: Wenn Sie diesem Tutorial folgen, können Sie diese Funktion problemlos implementieren und Ihrer Webanwendung mehr Wert verleihen. Lasst uns beginnen!

Frageninhalt

Ich verwende Gin, um einen HTTP-Server zu erstellen, und ich möchte den Benutzern dynamisch generierte Zip-Archive bereitstellen.

Theoretisch könnte ich zunächst eine ZIP-Datei im Dateisystem erstellen und diese dann bereitstellen. Aber das ist wirklich ein schlechter Ansatz (warten Sie 5 Minuten, bevor Sie mit dem Download beginnen). Ich möchte sofort damit beginnen, es den Benutzern bereitzustellen und den Inhalt zu pushen, sobald er generiert wird.

Ich habe den DataFromReader (Beispiel) gefunden, kenne aber die ContentLength erst, wenn das Archiv vollständig ist.

func DownloadEndpoint(c *gin.Context) {
    ...
    c.DataFromReader(
        http.StatusOK,
        ContentLength,
        ContentType,
        Body,
        map[string]string{
            "Content-Disposition": "attachment; filename=\"archive.zip\""),
        },
    )
}
Nach dem Login kopieren

Wie kann ich das machen?

Workaround

Mit der Stream-Methode und Archive/Zip können Sie dynamisch eine ZIP-Datei erstellen und diese auf den Server streamen.

package main

import (
    "os"

    "archive/zip"

    "github.com/gin-gonic/gin"
)

func main() {

    r := gin.Default()
    r.GET("/", func(c *gin.Context) {

        c.Writer.Header().Set("Content-type", "application/octet-stream")
        c.Stream(func(w io.Writer) bool {

            // Create a zip archive.
            ar := zip.NewWriter(w)

            file1, _ := os.Open("filename1")
            file2, _ := os.Open("filename2")
            c.Writer.Header().Set("Content-Disposition", "attachment; filename='filename.zip'")

            f1, _ := ar.Create("filename1")
            io.Copy(f1, file1)
            f2, _ := ar.Create("filename2")
            io.Copy(f2, file2)

            ar.Close()

            return false
        })
    })
    r.Run()
}
Nach dem Login kopieren

Verwenden Sie ResponseWriter direkt

package main

import (
    "io"
    "os"

    "archive/zip"

    "github.com/gin-gonic/gin"
)


func main() {

    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.Writer.Header().Set("Content-type", "application/octet-stream")
        c.Writer.Header().Set("Content-Disposition", "attachment; filename='filename.zip'")
        ar :=  zip.NewWriter(c.Writer)
        file1, _ := os.Open("filename1")
        file2, _ := os.Open("filename2")
        f1, _ := ar.Create("filename1")
        io.Copy(f1, file1)
        f2, _ := ar.Create("filename1")
        io.Copy(f1, file2)
        ar.Close()
    })
    r.Run()
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erstelle ich mit Gin im Handumdrehen ein Zip/7z-Archiv auf einem HTTP-Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage