Heim >Backend-Entwicklung >Golang >Wie kann ich in Go sowohl eine PDF-Datei als auch JSON-Daten aus einer einzigen HTTP-Anfrage analysieren?

Wie kann ich in Go sowohl eine PDF-Datei als auch JSON-Daten aus einer einzigen HTTP-Anfrage analysieren?

Linda Hamilton
Linda HamiltonOriginal
2024-10-24 15:06:02529Durchsuche

How to Parse Both a PDF File and JSON Data from a Single HTTP Request in Go?

Gleichzeitiges Parsen einer PDF-Datei und JSON-Daten aus einer einzelnen HTTP-Anfrage in Go

Bei der Verarbeitung von HTTP-Anfragen mit mehrteiligen Formulardaten ist dies möglich Es kann erforderlich sein, sowohl eine Datei als auch JSON-Daten aus derselben Anfrage zu analysieren. Ein häufiges Beispiel ist ein Formular, in dem Benutzer ein Dokument (PDF) hochladen und zusätzliche Daten (JSON) im Zusammenhang mit der Datei bereitstellen können.

Um dies in Go zu erreichen, reicht die Funktion r.ParseMultipartForm nicht aus, da sie nur analysiert mehrteilige Daten. Um sowohl die Datei als auch die JSON-Daten getrennt zu verarbeiten, ist die Funktion r.MultipartReader erforderlich.

Lösung:

Die Funktion r.MultipartReader gibt ein multipart.Reader-Objekt zurück, das ermöglicht die Iteration über jeden Teil der mehrteiligen Formulardaten mithilfe der Funktion r.NextPart. Dadurch können wir jeden Teil einzeln verarbeiten und dabei zwischen dem Dateiteil und dem JSON-Teil unterscheiden.

Hier ist eine aktualisierte Version der Handler-Funktion:

<code class="go">func (s *Server) PostFileHandler(w http.ResponseWriter, r *http.Request) {
    mr, err := r.MultipartReader()
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    doc := Doc{}
    for {
        part, err := mr.NextPart()

        if err == io.EOF {
            break
        }

        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }

        if part.FormName() == "file" {
            doc.Url = part.FileName()
            outfile, err := os.Create("./docs/" + part.FileName())
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            defer outfile.Close()
            _, err = io.Copy(outfile, part)
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
        }

        if part.FormName() == "doc" {
            jsonDecoder := json.NewDecoder(part)
            err = jsonDecoder.Decode(&doc)
            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }</code>

Das obige ist der detaillierte Inhalt vonWie kann ich in Go sowohl eine PDF-Datei als auch JSON-Daten aus einer einzigen HTTP-Anfrage analysieren?. 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