Cara Menghuraikan Fail dan JSON daripada Permintaan HTTP dalam Go

DDD
Lepaskan: 2024-10-24 22:12:02
asal
739 orang telah melayarinya

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}
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!