有人可以帮我解决尝试从 s3 下载文件时遇到的这个错误吗?
所以我想通过 go gin 创建存储服务 api,并且我想要一个使用 s3 对象密钥下载对象然后将此对象发送回客户端的路线。
cfg,_ := config.loaddefaultconfig(context.todo())
// create an amazon s3 service client
s3client := s3.newfromconfig(cfg)
downloader := manager.newdownloader(s3client)
router.post("/download-s3", func(ctx *gin.context) {
var data map[string]string
if err := ctx.shouldbindjson(&data); err != nil {
log.println("error: bind error")
ctx.json(http.statusbadrequest, gin.h{"error": err.error()})
return
}
log.println("body request data (filekey): ", data["filekey"])
filekey := data["filekey"]
/// buffer read
buf := make([]byte, 100)
// wrap with aws.writeatbuffer
w := manager.newwriteatbuffer(buf)
// download file into the memory
numbytesdownloaded, err := downloader.download(ctx, w, &s3.getobjectinput{
bucket: aws.string(bucketname),
key: aws.string(filekey),
})
if err != nil {
log.println("error: download error")
ctx.json(http.statusbadrequest, gin.h{"error": err.error()})
return
}
ctx.json(http.statusaccepted,
gin.h{
"message": fmt.sprintf("'%s' downloaded!", "test.jpg"),
"numbytesdownloaded": numbytesdownloaded,
},
)
ctx.data(http.statusok, "application/octet-stream", w.bytes())
})
上面的代码给了我这个错误:
操作错误s3:getobject,https响应错误statuscode:403,requestid:8khyw3rcs2za7d95,hostid:kolo + gy / dtzrrovswsb1bxinln8w + xdl0lnmysuwjnhupmbvk4itdfp + mq2xuo8ehasnx / fai4i =,api错误accessdenied:访问被拒绝phpcnendc phpcn
请求正文是这样的:
{
"filekey": "https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png"
}
我将所有这些 aws_s3_bucket_name、aws_region、aws_access_key_id、aws_secret_access_key 存储在 .env 文件中,而且我认为我将它们设置正确,因为我有另一条将文件上传到 s3 的路线(效果很好)。
正确答案
您的 filekey 是这样的 url:
"https://xxx-xxx.s3.ap-southeast-1.amazonaws.com/agencies/photo/06%3A03%3A2023_17%3A42%3A42_gggi_db_er.png"
这只能从 http 客户端使用,例如网络浏览器或curl。
具体来说,它不是有效的 s3 对象密钥。使用 getobject 或类似的 s3 api 时,它需要是有效的密钥,例如 agcies/photo/xyz.png
并且不应进行 url 编码。
以上就是如何从AWS S3下载对象到内存中并通过Go中的请求发送它?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1142
183.71 KB下载数642
644.84 KB下载数2755