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!