Heim  >  Artikel  >  Backend-Entwicklung  >  So analysieren Sie Dateien und JSON aus HTTP-Anfragen in Go

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

DDD
DDDOriginal
2024-10-24 22:12:02725Durchsuche

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}

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!

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