首頁 > 後端開發 > Golang > 在 Go 中將文件上傳到 Telegram 機器人時如何修復「錯誤請求:請求中沒有照片」錯誤?

在 Go 中將文件上傳到 Telegram 機器人時如何修復「錯誤請求:請求中沒有照片」錯誤?

Susan Sarandon
發布: 2024-11-03 18:58:02
原創
997 人瀏覽過

How to Fix

在 Go 中使用 POST 請求上傳 Telegram 檔案

在 Go 中,您可以使用 http 套件將檔案上傳到 Telegram 機器人。但是,您遇到錯誤:「請求錯誤:請求中沒有照片。」這表示您的要求中未正確包含檔案資料。

要解決此問題,可以使用以下程式碼:

<code class="go">import (
    "bytes"
    "io"
    "mime/multipart"
    "net/http"
    "path/filepath"
)

// content is a struct which contains a file's name, its type and its data.
type content struct {
    fname string
    ftype string
    fdata []byte
}

func sendPostRequest(url string, files ...content) ([]byte, error) {
    var (
        buf = new(bytes.Buffer)
        w   = multipart.NewWriter(buf)
    )

    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
        }
    }

    err := w.Close()
    if err != nil {
        return []byte{}, err
    }

    req, err := http.NewRequest("POST", url, buf)
    if err != nil {
        return []byte{}, err
    }
    req.Header.Add("Content-Type", w.FormDataContentType())

    client := &http.Client{}
    res, err := client.Do(req)
    if err != nil {
        return []byte{}, err
    }
    defer res.Body.Close()

    cnt, err := io.ReadAll(res.Body)
    if err != nil {
        return []byte{}, err
    }
    return cnt, nil
}</code>
登入後複製

此程式碼使用多部分套件建立一個包含檔案資料的 multipart/form-data 請求。內容結構代表一個檔案及其名稱、類型和資料。 sendPostRequest 函數採用 URL 和可變數量的內容對象,建構多部分請求,發送它並回傳回應。

在您的情況下,您可以使用此程式碼將檔案上傳到Telegram 機器人API:

<code class="go">func SendPostRequest(url string, filename string) []byte {
    file, err := os.Open(filename)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    stat, err := file.Stat()
    if err != nil {
        log.Fatal(err)
    }

    fileData, err := ioutil.ReadAll(file)
    if err != nil {
        log.Fatal(err)
    }

    return sendPostRequest(url,
        content{filename, "photo/jpeg", fileData},
    )
}</code>
登入後複製

此程式碼開啟文件,將其內容讀取到位元組片中,然後使用sendPostRequest 將檔案傳送到API。

以上是在 Go 中將文件上傳到 Telegram 機器人時如何修復「錯誤請求:請求中沒有照片」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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