gpt4 book ai didi

go - 使用 POST 请求 golang 上传文件

转载 作者:IT王子 更新时间:2023-10-29 01:40:56 24 4
gpt4 key购买 nike

我是 golang 的新手,我正在尝试编写一个函数,该函数将带有发布请求的文件上传到我正在编写的机器人的电报中。

我试过这段代码,但我从电报中得到的错误是错误请求:请求中没有照片

我在网上搜索了如何做到这一点,但我发现的都没有帮助我解决这个问题。

func SendPostRequest (url string, filename string) []byte {
file, err := os.Open(filename)

if err != nil {
log.Fatal(err)
}
defer file.Close()

response, err := http.Post(url, "binary/octet-stream", file)

if err != nil {
log.Fatal(err)
}
defer response.Body.Close()

content, err := ioutil.ReadAll(response.Body)

if err != nil {
log.Fatal(err)
}

return content
}

我从中调用 SendPostRequest 的函数是

func (e Engine) SendPhoto (filename string, chatId int64) APIResponse {
var url = fmt.Sprintf("%ssendPhoto?chat_id=%d", e.baseUrl, chatId)

var content []byte = SendPostRequest(url, filename)
var response APIResponse

json.Unmarshal(content, &response)
return response
}

编辑:我在代码中使用的 Telegram bot api 的链接是 https://core.telegram.org/bots/api

API 方法是https://core.telegram.org/bots/api#sendphoto

最佳答案

经过一番挖掘,我发现了这个

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
}
part.Write(f.fdata)
}

w.Close()

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
}

关于go - 使用 POST 请求 golang 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51234464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com