Maison >développement back-end >Golang >Comment gérer les données JSON et image dans les requêtes Multipart/Form-Data avec Gin in Go ?
Dans cet article, nous examinerons comment concevoir un gestionnaire de requêtes HTTP dans Utilisez le framework Gin pour accepter à la fois les données JSON et un fichier image envoyé dans le cadre d'une requête multipart/form-data.
Nous commençons par définir le gestionnaire de requêtes , UpdateProfile(), avec une structure qui définit le format de corps de requête attendu :
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) { // ... } }
Pour extraire les données JSON du corps de la requête, nous utilisons c.BindJSON(), fournissant un pointeur vers la structure de la requête :
var updateRequest request if err := c.BindJSON(&updateRequest); err != nil { // Handle JSON binding errors ... }
Pour analyser le fichier image, nous utilisons c.FormFile() :
avatar, err := c.FormFile("avatar") if err != nil { // Handle file parsing errors ... }
Si nous rencontrons une erreur telle que "caractère '-' invalide dans un littéral numérique", elle est probablement causée par tenter d'analyser JSON alors que le corps de la requête contient également une limite pour les données multipart/form. Nous pouvons spécifier explicitement le mode contraignant.FormMultipart à la place :
// 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 ... }
Si XML ou YAML est attendu à côté de JSON dans le multipart/form-data demande de données, nous pouvons les analyser manuellement, par exemple :
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 ... }
En suivant les techniques décrites, vous pouvez analyser efficacement à la fois les données JSON et les images téléchargées dans un seul multipart/formulaire -demande de données dans Go en utilisant Gin. N'oubliez pas de gérer de manière appropriée toute erreur de liaison potentielle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!