Heim >Backend-Entwicklung >Golang >Wie lade ich eine Datei mit einer POST-Anfrage in Go hoch?

Wie lade ich eine Datei mit einer POST-Anfrage in Go hoch?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 05:39:30468Durchsuche

How to Upload a File with a POST Request in Go?

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:

  1. 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>
  2. 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>
  3. 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>
  4. 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>
  5. 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>
  6. 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>
  7. 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>
  8. 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!

Stellungnahme:
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