Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich Header aus dem Antworttext in Go festlegen oder wiederherstellen?

Wie kann ich Header aus dem Antworttext in Go festlegen oder wiederherstellen?

PHPz
PHPznach vorne
2024-02-09 11:30:091106Durchsuche

如何在 Go 中从响应正文设置或恢复文件头?

In der Go-Sprache müssen wir häufig den Dateiheader der HTTP-Antwort festlegen oder wiederherstellen. Durch das Festlegen von Dateiheadern können wir steuern, wie der Browser oder Client mit dem Antwortinhalt umgeht. Wie kann man also in Go einen Dateiheader aus dem Antworttext festlegen oder wiederherstellen? In diesem Artikel stellt Ihnen der PHP-Editor Xinyi die Lösung dieses Problems ausführlich vor. Unabhängig davon, ob Sie ein Neuling oder ein erfahrener Entwickler sind, bietet Ihnen dieser Artikel nützliche Informationen und Beispielcode, mit denen Sie dieses Problem problemlos lösen können. Lasst uns beginnen!

Frageninhalt

Ich habe einige Probleme beim Wiederherstellen mehrerer Dateiheader, die als Antwort auf eine GET-Anfrage zur Komprimierung gesendet wurden. Das Hauptproblem hierbei besteht darin, dass ich das Standarddatum, das Go für die Datei festlegt, „30. November 1979“ (nachdem die Datei komprimiert wurde) entfernen und stattdessen das aktuelle Datum anzeigen möchte. Aber ich weiß nicht, wie ich die Header aus der Datei ändern oder sogar abrufen kann, da ich den Typ io.ReadCloser vom Antworttext erhalte.

Dies ist der aktuelle Code

archive := zip.NewWriter(w)
            attachment := "attachment; filename=someZipFile.zip")
            c.Writer.Header().Set("Content-Disposition", attachment)

            for i := 0; i < len(bodies); i++ { // bodies are response bodies, corresponding to "downloaded" files
                defer bodies[i].Close()
                fmt.Println(filenames[i])

                w, err := archive.Create("someZipFile/" + filenames[i])
                if err != nil {
                    fmt.Println("File couldn't be created")
                    return true
                }

                if _, err := io.Copy(w, bodies[i]); err != nil {
                    fmt.Println("File couldn't be written")
                    return true
                }

            }
            archive.Close()

Ich würde gerne klären, was ich tun kann, ob ich einen neuen Header erstellen oder einen vorhandenen Header bearbeiten soll, und wenn ersteres der Fall ist, wie ich den Datei-Header erhalte. Im schlimmsten Fall finden Sie eine völlig neue Lösung.

Solution

Create ist eine Hilfsmethode, die CreateHeader aufruft. Rufen Sie CreateHeader direkt auf, um Dateimetadaten anzugeben:

w, err := archive.CreateHeader(&zip.FileHeader{
        Name:     "someZipFile/" + filenames[i],
        Method:   zip.Deflate,
        Modified: time.Now(),
    })

Ändern Sie den Aufruf zum Erstellen der Archivdatei wie unten gezeigt. Verwenden Sie den anderen Code aus der Frage unverändert.

Das obige ist der detaillierte Inhalt vonWie kann ich Header aus dem Antworttext in Go festlegen oder wiederherstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen