Analyse simultanée d'un fichier PDF et de données JSON à partir d'une seule requête HTTP dans Go
Lors du traitement des requêtes HTTP contenant des données de formulaire en plusieurs parties, il peut être nécessaire d'analyser à la fois un fichier et des données JSON à partir de la même requête. Un exemple courant est un formulaire dans lequel les utilisateurs peuvent télécharger un document (PDF) et fournir des données supplémentaires (JSON) liées au fichier.
Pour y parvenir dans Go, la fonction r.ParseMultipartForm est insuffisante car elle analyse uniquement données en plusieurs parties. Pour gérer à la fois le fichier et les données JSON séparément, la fonction r.MultipartReader est requise.
Solution :
La fonction r.MultipartReader renvoie un objet multipart.Reader qui permet de parcourir chaque partie des données du formulaire en plusieurs parties à l'aide de la fonction r.NextPart. Cela nous permet de traiter chaque partie individuellement, en distinguant la partie fichier et la partie JSON.
Voici une version mise à jour de la fonction de gestionnaire :
<code class="go">func (s *Server) PostFileHandler(w http.ResponseWriter, r *http.Request) { mr, err := r.MultipartReader() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } doc := Doc{} for { part, err := mr.NextPart() if err == io.EOF { break } if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } if part.FormName() == "file" { doc.Url = part.FileName() outfile, err := os.Create("./docs/" + part.FileName()) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } defer outfile.Close() _, err = io.Copy(outfile, part) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } } if part.FormName() == "doc" { jsonDecoder := json.NewDecoder(part) err = jsonDecoder.Decode(&doc) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return }</code>
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!