在 Web 应用程序中,在 HTTP 请求中同时接收文件和 JSON 数据是很常见的。要成功处理这些元素,必须了解如何有效地解析它们。
考虑这样一个场景,您有一个 AngularJS 前端向 Go 后端发送请求。该请求包含文件(“file”)和 JSON 数据(“doc”)。您的目标是解析此请求中的 PDF 文件和 JSON 数据。
要解决此问题,您需要单独处理文件和 JSON 数据。通过利用 http.(*Request).MultipartReader() 并使用 NextPart() 迭代各部分,您可以提取并解析每个元素。
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
对于多部分请求中的每个部分:
part, err := mr.NextPart()
if err == io.EOF {
break
}
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
如果部件是文件(part.FormName() == "file"):
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数据(part.FormName() == "doc"):
jsonDecoder := json.NewDecoder(part)
err = jsonDecoder.Decode(&doc)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
解析文件和 JSON 数据后,您可以执行任何必要的后处理,例如将其保存到数据库或向客户端发送响应.
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3