Dalam artikel ini, kami akan mengkaji cara mereka bentuk pengendali permintaan HTTP dalam Gunakan rangka kerja Gin untuk menerima kedua-dua data JSON dan fail imej yang dihantar sebagai sebahagian daripada permintaan data berbilang bahagian/borang.
Kami mulakan dengan mentakrifkan pengendali permintaan , UpdateProfile(), dengan struct yang mentakrifkan format badan permintaan yang dijangkakan:
type request struct { Username string `json:"username" binding:"required,min=4,max=20"` Description string `json:"description" binding:"required,max=100"` } func (h *Handlers) UpdateProfile() gin.HandlerFunc { return func(c *gin.Context) { // ... } }
Untuk mengekstrak data JSON daripada badan permintaan, kami menggunakan c.BindJSON(), memberikan penunjuk kepada struct permintaan:
var updateRequest request if err := c.BindJSON(&updateRequest); err != nil { // Handle JSON binding errors ... }
Untuk menghuraikan fail imej, kami menggunakan c.FormFile() :
avatar, err := c.FormFile("avatar") if err != nil { // Handle file parsing errors ... }
Jika kita menghadapi ralat seperti "aksara tidak sah '-' dalam literal angka," ia mungkin disebabkan oleh cuba menghuraikan JSON manakala badan permintaan juga mengandungi sempadan untuk data berbilang bahagian/bentuk. Kami boleh menentukan mod pengikatan.FormMultipart secara eksplisit:
// c.ShouldBind will choose binding.FormMultipart based on the Content-Type header. // We call c.ShouldBindWith to make it explicitly. if err := c.ShouldBindWith(&updateRequest, binding.FormMultipart); err != nil { // Handle binding errors ... }
Jika XML atau YAML dijangka bersama JSON dalam multipart/form- permintaan data, kami boleh menghuraikannya secara manual, contohnya:
var event struct { At time.Time `xml:"time" binding:"required"` Player string `xml:"player" binding:"required"` Action string `xml:"action" binding:"required"` } if err := binding.XML.BindBody([]byte(updateRequest.Event), &event); err != nil { // Handle binding errors ... }
Dengan mengikuti teknik yang dibincangkan, anda boleh menghuraikan kedua-dua data JSON dan imej yang dimuat naik dengan berkesan dalam satu berbilang bahagian/bentuk -permintaan data dalam Go menggunakan Gin. Ingatlah untuk mengendalikan sebarang kemungkinan ralat pengikatan dengan sewajarnya.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Data JSON dan Imej dalam Permintaan Berbilang Bahagian/Data Borang dengan Gin dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!