Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go

Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go

DDD
DDDasal
2024-10-24 22:12:02725semak imbas

How to Parse Files and JSON from HTTP Requests in Go

Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go

Apabila membina permintaan HTTP daripada bahagian hadapan AngularJS, anda mungkin menghadapi keperluan untuk menghuraikan kedua-dua fail dan data JSON. Ini mungkin mencabar, terutamanya apabila cuba menghuraikan data JSON daripada badan permintaan.

Pertimbangkan muatan permintaan HTTP berikut:

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}

Dalam senario ini, "fail" mewakili PDF dokumen, manakala "doc" mengandungi data JSON yang ingin anda huraikan.

Untuk menghuraikan kedua-dua fail dan data JSON dengan berkesan, Go menyediakan penyelesaian yang sesuai. Begini cara anda boleh mencapai ini:

Daripada menganggap bahawa r.Body mengandungi data JSON, anda harus menggunakan r.MultipartReader() untuk memproses kedua-dua bahagian PDF dan JSON secara berasingan. Fungsi ini menyediakan objek mime/multipart.Reader yang membolehkan anda mengulangi bahagian permintaan yang berlainan menggunakan r.NextPart().

Berikut ialah contoh fungsi pengendali yang disemak:

<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>

Atas ialah kandungan terperinci Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn