Maison >développement back-end >Golang >Comment analyser des fichiers et JSON à partir de requêtes HTTP dans Go
Analyse de fichiers et JSON à partir de requêtes HTTP dans Go
Lors de la construction d'une requête HTTP à partir d'un frontal AngularJS, vous pouvez rencontrer le besoin de analyser à la fois un fichier et des données JSON. Cela peut être difficile, en particulier lorsque vous tentez d'analyser les données JSON du corps de la requête.
Considérez la charge utile de la requête HTTP suivante :
Content-Disposition: form-data; name="file"; filename="Parent Handbook.pdf" Content-Type: application/pdf Content-Disposition: form-data; name="doc" {"title":"test","cat":"test cat","date":20142323}
Dans ce scénario, « fichier » représente le PDF. document, tandis que "doc" contient les données JSON que vous souhaitez analyser.
Pour analyser efficacement à la fois le fichier et les données JSON, Go fournit une solution appropriée. Voici comment y parvenir :
Au lieu de supposer que r.Body contient les données JSON, vous devez utiliser r.MultipartReader() pour traiter séparément les parties PDF et JSON. Cette fonction fournit un objet mime/multipart.Reader qui vous permet de parcourir les différentes parties de la requête à l'aide de r.NextPart().
Voici un exemple de fonction de gestionnaire révisée :
<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() // No more parts if err == io.EOF { break } // Error occurred if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } // PDF 'file' part 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 } } // JSON 'doc' part 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!