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 ?

Comment gérer les données JSON et image dans les requêtes Multipart/Form-Data avec Gin in Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-21 01:56:15981parcourir

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

Réception de données JSON et d'images avec Gin in Go

Bref

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.

Configuration du gestionnaire de requêtes

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) {
        // ...
    }
}

Analyse JSON avec c.BindJSON()

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
    ...
}

Analyse de l'image avec c.FormFile()

Pour analyser le fichier image, nous utilisons c.FormFile() :

avatar, err := c.FormFile("avatar")
if err != nil {
    // Handle file parsing errors
    ...
}

Erreur : "caractère '-' invalide dans un littéral numérique"

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
    ...
}

Analyse XML ou YAML à partir de multipart/form-data

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
    ...
}

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn