go - Go Telegram Bot API 从本地文件上传照片
问题描述
我使用 github.com/go-telegram-bot-api/telegram-bot-api 处理电报后来我使用外部链接上传了照片: 简化代码是这样的:
url := `http://path-to-image/img.jpg`
msg := tgbotapi.NewPhotoUpload(groupID, nil)
msg.FileID = url
msg.Caption = "New photo"
bot.Send(msg)
但是现在,我的照片只能在封闭的本地网络中使用。http://example.loc/img.jpg之类的链接显然不起作用。所以,我下载了一个文件,然后尝试从磁盘或内存上传它。这里有很多例子https://github.com/go-telegram-bot-api/telegram-bot-api/blob/master/bot_test.go 但是没有人工作。我尝试了所有示例甚至更多示例,但总是遇到各种错误:
- 错误请求:请求中没有照片
- 错误请求:主机无效
- 错误请求:URL 主机为空
- 错误请求:不支持的 URL 协议
等等。
有谁知道如何从磁盘或内存上传照片(甚至更好)。提前致谢。
解决方案
从本地磁盘上传图片的一种方法是读取文件,然后将字节数组传递给FileBytes,用像PhotoConfig这样的Chattable包装它并通过以下方式发送bot.send
:
photoBytes, err := ioutil.ReadFile("/your/local/path/to/picture.png")
if err != nil {
panic(err)
}
photoFileBytes := tgbotapi.FileBytes{
Name: "picture",
Bytes: photoBytes,
}
chatID := 12345678
message, err := bot.Send(tgbotapi.NewPhotoUpload(int64(chatID), photoFileBytes))
这里tgbotapi.NewPhotoUpload()
为我们创建了一个 PhotoConfig。
推荐阅读
- kubernetes - 如何使用自定义映像在 Ansible 中创建 Google Kubernetes (GKE) 集群?
- vba - 调试 MS Word 宏以导入返回重复图像的 JPG
- c - 在 C 中使用链表不正确地实现堆栈数据类型
- git - git push 无法在 docker 上使用 Gitea 和 traefik 和 basicauth
- asp.net-core - ASP.NET MVC 客户端的混合流身份验证
- docker - 由于连接超时错误,无法构建 docker 映像
- ios - iOS - 启动 Siri 意图时 AppDelegate 未检索 userActivity
- java - 无法访问 API 端点
- java - IntelliJ - 如何调试通过应用程序中创建的集成 Jetty 服务器实例运行的 JSP?
- python - 以“a”开头,以“a”结尾的首都。字母“a”是大写还是小写都没关系