So analysieren Sie Dateien und JSON aus HTTP-Anfragen in Go

DDD
Freigeben: 2024-10-24 22:12:02
Original
739 Leute haben es durchsucht

How to Parse Files and JSON from HTTP Requests in Go

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}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!