Parsen von Dateien und JSON aus HTTP-Anfragen in Go
Beim Erstellen einer HTTP-Anfrage von einem AngularJS-Frontend aus kann es sein, dass dies erforderlich ist Analysieren Sie sowohl eine Datei als auch JSON-Daten. Dies kann eine Herausforderung darstellen, insbesondere wenn versucht wird, die JSON-Daten aus dem Anforderungstext zu analysieren.
Berücksichtigen Sie die folgende Nutzlast der HTTP-Anforderung:
Content-Disposition: form-data; name="file"; filename="Parent Handbook.pdf" Content-Type: application/pdf Content-Disposition: form-data; name="doc" {"title":"test","cat":"test cat","date":20142323}
In diesem Szenario stellt „Datei“ die PDF-Datei dar document, während „doc“ die JSON-Daten enthält, die Sie analysieren möchten.
Um sowohl die Datei als auch die JSON-Daten effektiv zu analysieren, bietet Go eine geeignete Lösung. So können Sie dies erreichen:
Anstatt davon auszugehen, dass r.Body die JSON-Daten enthält, sollten Sie r.MultipartReader() verwenden, um sowohl die PDF- als auch die JSON-Teile separat zu verarbeiten. Diese Funktion stellt ein mime/multipart.Reader-Objekt bereit, das es Ihnen ermöglicht, mit r.NextPart() die verschiedenen Teile der Anfrage zu durchlaufen.
Hier ist ein Beispiel einer überarbeiteten Handlerfunktion:
<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() // No more parts if err == io.EOF { break } // Error occurred if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // PDF 'file' part 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 } } // JSON 'doc' part 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 vonSo analysieren Sie Dateien und JSON aus HTTP-Anfragen in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!