首页 > 后端开发 > Golang > 使用 Golang 向 Telegram 机器人发送文件时如何修复'错误请求:请求中没有照片”错误?

使用 Golang 向 Telegram 机器人发送文件时如何修复'错误请求:请求中没有照片”错误?

DDD
发布: 2024-11-02 16:01:02
原创
720 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板