Maison >développement back-end >Golang >Comment publier des fichiers et des données de formulaire à l'aide de « multipart/form-data » de Go ?

Comment publier des fichiers et des données de formulaire à l'aide de « multipart/form-data » de Go ?

DDD
DDDoriginal
2024-11-25 09:48:38686parcourir

How do I POST Files and Form Data Using Go's `multipart/form-data`?

Fichiers POST dans une demande de données multipart/formulaire

Les requêtes multipart sont fréquemment utilisées pour les téléchargements de fichiers, où, avec le fichier, des données de formulaire supplémentaires doivent être soumises. Voyons comment nous pouvons résoudre ce problème à l'aide des packages mime/multipart et http de Go.

Considérez le formulaire HTML suivant :

<form action="/multipart" enctype="multipart/form-data" method="POST">
  <label for="file">Please select a File</label>
  <input>

Dans Go, nous pouvons envoyer cette requête multipart comme suit :

import (
  "bytes"
  "io"
  "mime/multipart"
  "net/http"
)

var buffer bytes.Buffer
w := multipart.NewWriter(&buffer)

// Write form fields
w.CreateFormField("input1")
w.WriteField("input1", "value1")

// Prepare to write a file
fd, err := os.Open("filename.dat")
if err != nil {
  return err
}

// Create a form field for the file
fw, err := w.CreateFormFile("file", fd.Name())
if err != nil {
  return err
}

// Copy file contents into form field
if _, err := io.Copy(fw, fd); err != nil {
  return err
}

// Close writer
w.Close()

// Prepare request
resp, err := http.Post(url, w.FormDataContentType(), &buffer)
if err != nil {
  return err
}

La clé pour envoyer des fichiers dans des requêtes multipart réside dans l'utilisation de CreateFormFile sur *multipart.Writer pour créer un champ de formulaire spécifiquement pour le fichier. Une fois créé, nous pouvons utiliser io.Copy pour écrire le contenu du fichier dans ce champ de formulaire.

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