【发布时间】:2018-12-16 11:36:14
【问题描述】:
我是 golang 的新手,我正在尝试编写一个函数,该函数将带有 post 请求的文件上传到我正在编写的机器人的电报中。
我已尝试使用此代码,但我从电报中得到的错误是
Bad Request: there is no photo in the request.
我已经在网上搜索了如何做到这一点,但我发现的所有内容都没有帮助我解决问题。
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
【问题讨论】:
-
希望得到帮助:GIST
-
文档说要使用 multipart/form-data 上传文件。
-
@MichaelHampton 我尝试使用“multipart/form-data”而不是“binary/octet-stream”,但它无论如何也不会工作,也没有来自电报的错误消息。
-
问题是您没有在请求中设置照片参数名称。另外,我建议不要创建集成,而是使用这个包 github.com/go-telegram-bot-api/telegram-bot-api 。有
UploadFile方法可能很容易解决您的问题 -
@ttomalak 你能解释一下如何在请求中设置照片参数名称吗?
标签: go httprequest telegram-bot