Heim >Backend-Entwicklung >Golang >Wie lade ich eine Datei mit einer POST-Anfrage in Go hoch?
Eine Datei mit einer POST-Anfrage in Go hochladen
Das Hochladen einer Datei über eine POST-Anfrage ist eine häufige Aufgabe bei der Entwicklung von Webanwendungen. Dies wird noch wichtiger, wenn Sie mit Telegram-Bots arbeiten, die das Hochladen von Dateien als Teil von API-Aufrufen erfordern.
Leider kann die Verwendung einer einfachen http.Post-Funktion zu Fehlern wie „Bad Request: there is no.“ führen Foto in der Anfrage. Um dieses Problem zu beheben, müssen Sie die Datei mit dem Inhaltstyp „multipart/form-data“ senden. So können Sie das erreichen:
Erstellen Sie eine Inhaltsstruktur:
Definieren Sie eine Inhaltsstruktur, um die Metadaten und Daten der Datei darzustellen:
<code class="go">type content struct { fname string ftype string fdata []byte }</code>
Multipart Form Builder:
Verwenden Sie multipart.NewWriter, um einen neuen Multipart Form Builder zu erstellen:
<code class="go">var buf = new(bytes.Buffer) var w multipart.NewWriter(buf)</code>
Dateidaten hinzufügen:
Durchlaufen Sie die Dateien, die Sie hochladen müssen, und erstellen Sie für jede ein Formularteil:
<code class="go">for _, f := range files { part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname)) if err != nil { return []byte{}, err } _, err = part.Write(f.fdata) if err != nil { return []byte{}, err } }</code>
Formular schließen:
Sobald Sie alle Dateien hinzugefügt haben, schließen Sie den Multipart Form Builder:
<code class="go">err := w.Close() if err != nil { return []byte{}, err }</code>
HTTP-Anfrage erstellen:
Erstellen Sie eine neue HTTP-Anfrage mit http.NewRequest:
<code class="go">req, err := http.NewRequest("POST", url, buf) if err != nil { return []byte{}, err }</code>
Inhaltstyp festlegen:
Legen Sie den Content-Type-Header fest, um anzugeben, dass Sie mehrteilige/Formulardaten senden:
<code class="go">req.Header.Add("Content-Type", w.FormDataContentType())</code>
Anfrage senden:
Senden Sie die HTTP-Anfrage über einen HTTP-Client:
<code class="go">client := &http.Client{} res, err := client.Do(req) if err != nil { return []byte{}, err }</code>
Antwort lesen:
Antworttext lesen:
<code class="go">cnt, err := io.ReadAll(res.Body) if err != nil { return []byte{}, err }</code>
Indem Sie diese Schritte befolgen, können Sie Dateien mit POST-Anfragen in Go erfolgreich hochladen, auch bei der Arbeit mit Telegram-Bots.
Das obige ist der detaillierte Inhalt vonWie lade ich eine Datei mit einer POST-Anfrage in Go hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!