Rumah > pembangunan bahagian belakang > Golang > Bagaimana Mengendalikan Data dan Imej JSON dalam Permintaan Berbilang Bahagian/Data dengan Gin?

Bagaimana Mengendalikan Data dan Imej JSON dalam Permintaan Berbilang Bahagian/Data dengan Gin?

Mary-Kate Olsen
Lepaskan: 2024-12-01 21:01:11
asal
830 orang telah melayarinya

How to Handle JSON Data and Images in Multipart/Form-Data Requests with Gin?

Go: Mengendalikan Data dan Imej JSON dalam Borang dengan Gin

Gin ialah rangka kerja web popular dalam Go yang memudahkan pengendalian permintaan HTTP. Artikel ini menangani isu khusus dengan menghuraikan kedua-dua data JSON dan imej daripada permintaan berbilang bahagian/data bentuk menggunakan mekanisme pengikatan Gin.

Kod Pengendalian Permintaan

Permintaan fungsi pengendali dalam Gin menerima dan mengendalikan permintaan HTTP. Dalam kes ini, ia menjangka menerima permintaan berbilang bahagian yang mengandungi kedua-dua data JSON dan fail imej.

func (h *Handlers) UpdateProfile() gin.HandlerFunc {
    type request struct {
        Username    string `json:"username" binding:"required,min=4,max=20"`
        Description string `json:"description" binding:"required,max=100"`
    }

    return func(c *gin.Context) {
        var updateRequest request

        // Bind JSON data to `updateRequest` struct.
        if err := c.BindJSON(&updateRequest); err != nil {
            // Handle error here...
            return
        }

        // Get the image file from the request.
        avatar, err := c.FormFile("avatar")
        if err != nil {
            // Handle error here...
            return
        }

        // Validate file size and content type.
        if avatar.Size > 3<<20 || !avatar.Header.Get("Content-Type") { // if avatar size more than 3mb
            // Handle error here...
            return
        }

        // Handle image processing and database operations here...
        // Save username, description, and image to a database.

        c.IndentedJSON(http.StatusNoContent, gin.H{"message": "successful update"})
    }
}
Salin selepas log masuk

Kes Ujian

Ujian unit disertakan untuk mengesahkan fungsi pengendali. Ia menyediakan permintaan olok-olok dengan badan berbilang bahagian/data bentuk. Permintaan mengandungi data JSON dan imej.

func TestUser_UpdateProfile(t *testing.T) {
    type testCase struct {
        name               string
        image              io.Reader
        username           string
        description        string
        expectedStatusCode int
    }

    // Set up mock request with multipart/form-data body.
    // ...

    for _, tc := range testCases {
        // ...

        w := httptest.NewRecorder()
        router.ServeHTTP(w, req)

        assert.Equal(t, tc.expectedStatusCode, w.Result().StatusCode)
    }
}
Salin selepas log masuk

Ralat Semasa Ujian

Semasa ujian, ralat berlaku disebabkan oleh aksara yang tidak sah dalam badan permintaan. Mesej ralat ialah "Ralat #01: aksara tidak sah '-' dalam literal angka."

Punca Punca

Fungsi c.BindJSON Gin digunakan untuk menghuraikan data JSON daripada badan permintaan. Walau bagaimanapun, ia menganggap bahawa badan permintaan bermula dengan JSON yang sah. Dalam kes permintaan berbilang bahagian/data bentuk, kandungan bermula dengan sempadan (--30b24345de...), yang merupakan aksara tidak sah untuk literal JSON.

Penyelesaian

Untuk menyelesaikan isu ini, kita boleh menggunakan fungsi c.ShouldBind Gin dengan mengikat.FormMultipart untuk secara eksplisit ikat pada badan berbilang bahagian/data bentuk. Ini membolehkan Gin menghuraikan kedua-dua data JSON dan fail imej dengan betul.

// Bind JSON data and image file to `updateRequest` struct.
if err := c.ShouldBindWith(&updateRequest, binding.FormMultipart); err != nil {
    // Handle error here...
    return
}
Salin selepas log masuk

Kesimpulan

Artikel ini menunjukkan cara mengendalikan data JSON dan fail imej secara serentak dalam permintaan berbilang bahagian/data bentuk dengan Gin. Ia menyerlahkan kepentingan menggunakan kaedah pengikatan yang betul (c.ShouldBindWith(..., binding.FormMultipart)) untuk mengelakkan ralat penghuraian.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Data dan Imej JSON dalam Permintaan Berbilang Bahagian/Data dengan Gin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan