Maison > Article > développement back-end > Comment télécharger un fichier avec une requête POST dans Go ?
Télécharger un fichier avec une requête POST dans Go
Le téléchargement d'un fichier via une requête POST est une tâche courante lors du développement d'applications Web. Cela devient encore plus important lorsque vous travaillez avec des robots Telegram, qui nécessitent que les fichiers soient téléchargés dans le cadre des appels API.
Malheureusement, l'utilisation d'une simple fonction http.Post peut entraîner des erreurs telles que "Bad Request: There is no photo dans la demande." Pour résoudre ce problème, vous devez envoyer le fichier en utilisant le type de contenu multipart/form-data. Voici comment y parvenir :
Créer une structure de contenu :
Définissez une structure de contenu pour représenter les métadonnées et les données du fichier :
<code class="go">type content struct { fname string ftype string fdata []byte }</code>
Générateur de formulaires en plusieurs parties :
Utilisez multipart.NewWriter pour créer un nouveau générateur de formulaires en plusieurs parties :
<code class="go">var buf = new(bytes.Buffer) var w multipart.NewWriter(buf)</code>
Ajouter des données de fichier :
Parcourez les fichiers que vous devez télécharger et créez une partie de formulaire pour chacun :
<code class="go">for _, f := range files { part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname)) if err != nil { return []byte{}, err } _, err = part.Write(f.fdata) if err != nil { return []byte{}, err } }</code>
Fermer le formulaire :
Une fois que vous avez ajouté tous les fichiers, fermez le générateur de formulaire en plusieurs parties :
<code class="go">err := w.Close() if err != nil { return []byte{}, err }</code>
Créer une requête HTTP :
Créez une nouvelle requête HTTP à l'aide de http.NewRequest :
<code class="go">req, err := http.NewRequest("POST", url, buf) if err != nil { return []byte{}, err }</code>
Définir le type de contenu :
Définissez l'en-tête Content-Type pour indiquer que vous envoyez des données multipart/form :
<code class="go">req.Header.Add("Content-Type", w.FormDataContentType())</code>
Envoyer la demande:
Envoyez la requête HTTP à l'aide d'un client HTTP :
<code class="go">client := &http.Client{} res, err := client.Do(req) if err != nil { return []byte{}, err }</code>
Lire la réponse :
Lisez le corps de la réponse :
<code class="go">cnt, err := io.ReadAll(res.Body) if err != nil { return []byte{}, err }</code>
En suivant ces étapes, vous pouvez réussir à télécharger des fichiers avec des requêtes POST dans Go, y compris lorsque vous travaillez avec des robots Telegram.
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!