首頁  >  文章  >  後端開發  >  如何在 Go 中使用 POST 請求上傳檔案?

如何在 Go 中使用 POST 請求上傳檔案?

Barbara Streisand
Barbara Streisand原創
2024-11-04 05:39:30364瀏覽

How to Upload a File with a POST Request in Go?

在 Go 中使用 POST 請求上傳文件

透過 POST 請求上傳文件是開發 Web 應用程式時的常見任務。當使用 Telegram 機器人時,這一點變得更加重要,因為 Telegram 機器人需要在 API 呼叫中上傳檔案。

不幸的是,使用簡單的http.Post 函數可能會導致錯誤,例如「錯誤要求:沒有請求中的照片。」要解決此問題,您需要使用multipart/form-data 內容類型發送文件。以下是實現此目標的方法:

  1. 建立內容結構:

    定義一個內容結構來表示檔案的元資料和資料:

    <code class="go">type content struct {
        fname string
        ftype string
        fdata []byte
    }</code>
  2. 多部分錶單產生器:

    使用multipart.NewWriter 建立新的多部分錶單產生器:

    使用multipart.NewWriter 建立新的多部分錶單產生器:
    <code class="go">var buf = new(bytes.Buffer)
    var w multipart.NewWriter(buf)</code>
  3. 新增檔案資料:

    迭代您需要上傳的檔案並為每個檔案建立表單部分:

    <code class="go">for _, f := range files {
        part, err := w.CreateFormFile(f.ftype, filepath.Base(f.fname))
        if err != nil {
            return []byte{}, err
        }
    
        _, err = part.Write(f.fdata)
        if err != nil {
            return []byte{}, err
        }
    }</code>
  4. 關閉表單

    新增所有檔案後,關閉多部分錶單產生器:

    <code class="go">err := w.Close()
    if err != nil {
        return []byte{}, err
    }</code>
  5. 創建HTTP 請求:

    使用http.NewRequest 創建新的HTTP 請求:

    <code class="go">req, err := http.NewRequest("POST", url, buf)
    if err != nil {
        return []byte{}, err
    }</code>
  6. 設置內容類型:

    設定Content-Type 標頭以指示您正在發送多部分/表單資料:

    <code class="go">req.Header.Add("Content-Type", w.FormDataContentType())</code>
  7. 發送請求:

    發送請求
    <code class="go">client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        return []byte{}, err
    }</code>
    :
  8. 發送請求:

    發送請求

    :
    <code class="go">cnt, err := io.ReadAll(res.Body)
    if err != nil {
        return []byte{}, err
    }</code>
發送請求

:

發送請求:發送請求:發送請求:發送要求使用HTTP 用戶端傳送HTTP 要求:讀取回應:讀取回應正文: 按照以下步驟,您可以在Go 中使用POST 請求成功上傳文件,包括在使用Telegram 機器人時。

以上是如何在 Go 中使用 POST 請求上傳檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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