Heim >Backend-Entwicklung >Golang >Wie handhabe ich Datei-Uploads in Multipart-/Formulardaten-POST-Anfragen mit Go ordnungsgemäß?

Wie handhabe ich Datei-Uploads in Multipart-/Formulardaten-POST-Anfragen mit Go ordnungsgemäß?

Linda Hamilton
Linda HamiltonOriginal
2024-12-01 07:32:11252Durchsuche

How to Properly Handle File Uploads in Multipart/Form-Data POST Requests with Go?

Fehlerbehebung bei Multipart/Form-Data POST in Go

Im Zusammenhang mit dem Senden eines Multipart-Formulars mithilfe der Mime/Multipart- und http-Pakete von Go können bestimmte Probleme auftreten erfordern eine Fehlerbehebung. Schauen wir uns einen konkreten Fall im Zusammenhang mit der Erstellung eines Dateifelds an.

Das Problem

Sie haben den folgenden Code und versuchen, ein mehrteiliges Formular mit Textfeldern und einer Datei zu senden:

func main() {
    // ...

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}

Sie haben jedoch Probleme damit, einen Reader zu erhalten, um die Datei in die Datei Field Writer FW einzulesen.

Die Lösung

Um dieses Problem zu lösen, müssen Sie die Datei mit os.Open öffnen und die zurückgegebene *os.File als io.Writer an die CreateFormFile-Funktion übergeben. Hier ist der korrigierte Code:

import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    // ...

    // Open the file
    fd, err := os.Open("filename.dat")
    if err != nil {
        return err
    }

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // Copy the file contents into the file field writer
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}

Mit dieser Änderung wird der Inhalt der Datei korrekt in das mehrteilige Formular geschrieben, sodass Sie sowohl Textfelder als auch eine Datei erfolgreich senden können.

Das obige ist der detaillierte Inhalt vonWie handhabe ich Datei-Uploads in Multipart-/Formulardaten-POST-Anfragen mit Go ordnungsgemäß?. 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