Menerima Data dan Imej JSON dengan Go Gin
Gin ialah rangka kerja web popular dalam Go yang menyediakan mekanisme yang mudah untuk mengendalikan permintaan HTTP. Dalam senario khusus ini, kami berminat untuk menerima kedua-dua data JSON dan imej melalui borang berbilang bahagian.
Struct for Receiving Data
Untuk menerima kedua-dua data JSON dan imej, kita boleh menentukan struct yang mencerminkan struktur yang masuk permintaan:
type RequestData struct { Avatar *multipart.FileHeader `form:"avatar" binding:"required"` UserData struct { Username string `json:"username" binding:"required,min=4,max=20"` Description string `json:"description" binding:"required,max=100"` } `form:"user" binding:"required"` }
Mengikat Permintaan
Kaedah c.Bind Gin boleh digunakan untuk mengikat data permintaan kepada struct yang ditentukan. Walau bagaimanapun, memandangkan kita sedang berurusan dengan borang berbilang bahagian, kita perlu menggunakan c.ShouldBindWith secara eksplisit:
var request RequestData if err := c.ShouldBindWith(&request, binding.FormMultipart); err != nil { // Handle error if binding fails }
Mengendalikan Imej
Selepas mengikat, permintaan .Medan avatar akan menyimpan fail imej. Berikut ialah contoh kod untuk memproses imej:
if data, err := request.Avatar.Open(); err == nil { // Process image data } else { // Handle error if opening the file fails }
Mengendalikan Data JSON
Data JSON sudah terikat untuk diminta.UserData. Anda boleh mengakses medan secara terus:
username := request.UserData.Username
Contoh Penggunaan
Berikut ialah contoh cara menggunakan pendekatan ini dalam pengendali Gin:
import ( "github.com/gin-gonic/gin" ) func handleMultipart(c *gin.Context) { var request RequestData if err := c.ShouldBindWith(&request, binding.FormMultipart); err != nil { // Handle error if binding fails return } // Process the image and handle any validation or business logic }
Nota: Jika anda sudah biasa dengan penjilidan permintaan Gin, anda mungkin tertanya-tanya mengapa kami secara eksplisit menggunakan c.ShouldBindWith dan bukannya c.Bind. Dalam kes borang berbilang bahagian, Gin secara automatik akan memilih kaedah pengikatan yang sesuai (FormMultipart) berdasarkan pengepala Jenis Kandungan. Walau bagaimanapun, kami secara eksplisit menggunakan c.ShouldBindWith untuk menjelaskan niat kami dan memastikan permintaan itu terikat dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk Menerima Data JSON dan Imej dengan Borang Berbilang Bahagian Go Gin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!