首頁  >  文章  >  後端開發  >  如何在 Go 中解析來自單一 HTTP 請求的 PDF 檔案和 JSON 資料?

如何在 Go 中解析來自單一 HTTP 請求的 PDF 檔案和 JSON 資料?

Linda Hamilton
Linda Hamilton原創
2024-10-24 15:06:02397瀏覽

How to Parse Both a PDF File and JSON Data from a Single HTTP Request in Go?

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn