在Go 中同時解析來自單一HTTP 請求的PDF 檔案和JSON 資料
處理包含多部分錶單資料的HTTP 請求時,它可以有必要解析來自相同請求的檔案和JSON 資料。一個常見的範例是使用者可以上傳文件 (PDF) 並提供與文件相關的附加資料 (JSON) 的表單。
要在 Go 中實現此目的,r.ParseMultipartForm 函數是不夠的,因為它只能解析多部分資料。要分別處理文件和 JSON 數據,需要 r.MultipartReader 函數。
解決方案:
r.MultipartReader 函數傳回一個 multipart.Reader 對象,該物件允許使用 r.NextPart 函數迭代多部分錶單資料的每個部分。這使我們能夠單獨處理每個部分,區分文件部分和 JSON 部分。
這是處理函數的更新版本:
<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>
以上是如何在 Go 中解析來自單一 HTTP 請求的 PDF 檔案和 JSON 資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!