首頁 >後端開發 >Golang >使用 Golang 向 Telegram 機器人發送文件時如何修復「錯誤請求:請求中沒有照片」錯誤?

使用 Golang 向 Telegram 機器人發送文件時如何修復「錯誤請求:請求中沒有照片」錯誤?

DDD
DDD原創
2024-11-02 16:01:02721瀏覽

How to Fix the 'Bad Request: there is no photo in the request' Error When Sending Files to Telegram Bots with Golang?

在Golang 中使用POST 請求發送文件以進行Telegram Bot 開發

問題:上傳文件時出現錯誤“錯誤請求:請求中沒有照片”

在嘗試編寫透過POST 請求將檔案上傳到Telegram 的函數時,您遇到了錯誤「錯誤請求:請求中沒有照片」。您最初使用 SendPostRequest 函數的方法已被證明是不成功的。

改進的解決方案

經過徹底研究,發現了以下改進的解決方案:

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

    // Iterate over the files and add them as form fields
    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
        }
    }

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

    // Create a new POST request
    req, err := http.NewRequest("POST", url, buf)
    if err != nil {
        return []byte{}, err
    }

    // Set the Content-Type header
    req.Header.Add("Content-Type", w.FormDataContentType())

    // Create a new HTTP client
    client := &http.Client{}

    // Send the request
    res, err := client.Do(req)
    if err != nil {
        return []byte{}, err
    }

    // Close the response body
    defer res.Body.Close()

    // Read the response body
    cnt, err := io.ReadAll(res.Body)
    if err != nil {
        return []byte{}, err
    }

    return cnt, nil
}</code>

此更新的解決方案採用多部分形式發送文件的數據,這解決了問題並確保該文件存在於請求中。

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

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