首頁 > 後端開發 > Golang > 如何使用 Go 正確處理多部分/表單資料 POST 請求中的文件上傳?

如何使用 Go 正確處理多部分/表單資料 POST 請求中的文件上傳?

Linda Hamilton
發布: 2024-12-01 07:32:11
原創
251 人瀏覽過

How to Properly Handle File Uploads in Multipart/Form-Data POST Requests with Go?

Go 中的Multipart/Form-Data POST 故障排除

在使用Go 的mime/multipart 和http 套件發送多部分錶單的上下文中,您可能會遇到某些問題,需要排除故障。讓我們深入研究與建立文件欄位相關的特定案例。

問題

您有以下程式碼,並嘗試傳送包含文字欄位和檔案的多部分錶單:

func main() {
    // ...

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}
登入後複製

但是,您正在努力解決如何取得 Reader將文件讀入文件欄位寫入器的問題fw.

解決方案

要解決此問題,您需要使用os.Open 開啟文件,並將傳回的*os.File 作為io.Writer 傳遞給CreateFormFile 函數。這是修正後的程式碼:

import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    // ...

    // Open the file
    fd, err := os.Open("filename.dat")
    if err != nil {
        return err
    }

    // Create a file field
    fw, err := w.CreateFormFile("file", "filename.dat")
    if err != nil {
        return err
    }

    // Copy the file contents into the file field writer
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }

    // ...

    // Send the request
    resp, err := http.Post(url, w.FormDataContentType(), &buffer)
    if err != nil {
        return err
    }

    // ...
}
登入後複製

透過此修改,檔案的內容將正確寫入多部分錶單,讓您可以成功傳送文字欄位和檔案。

以上是如何使用 Go 正確處理多部分/表單資料 POST 請求中的文件上傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板