Go:如何通过 GIN-Router 从 AWS S3 将文件作为二进制流发送到浏览器?
Go: How to send a File from AWS S3 via GIN-Router as binary stream to the browser?
如何将从 S3 收到的文件作为二进制响应发送到 Gin?
比方说,我有以下代码从 S3 存储桶中获取图像:
response, err := i.s3Client.GetObject(context.TODO(), &s3.GetObjectInput{
Bucket: aws.String("test"),
Key: aws.String(filename),
})
如何将此响应通过管道传输到 Gin-router 的响应上下文中?
我可以这样做:
body, err := ioutil.ReadAll(response.Body)
if err != nil {
ctx.JSON(http.StatusBadRequest, err)
return
}
但是如何告诉 gin 将其作为输出?我想到但行不通的是:
ctx.Header("Content-Type", *response.ContentType)
ctx.Header("Cache-control", "max-age="+strconv.Itoa(60*60*24*365))
ctx.Write(body)
有什么我可以在这里做的吗?
你快完成了:
而不是 ctx.Write
使用这个:
ctx.DataFromReader(200, response.ContentLength, *response.ContentType, response.Body, nil)
如何将从 S3 收到的文件作为二进制响应发送到 Gin?
比方说,我有以下代码从 S3 存储桶中获取图像:
response, err := i.s3Client.GetObject(context.TODO(), &s3.GetObjectInput{
Bucket: aws.String("test"),
Key: aws.String(filename),
})
如何将此响应通过管道传输到 Gin-router 的响应上下文中?
我可以这样做:
body, err := ioutil.ReadAll(response.Body)
if err != nil {
ctx.JSON(http.StatusBadRequest, err)
return
}
但是如何告诉 gin 将其作为输出?我想到但行不通的是:
ctx.Header("Content-Type", *response.ContentType)
ctx.Header("Cache-control", "max-age="+strconv.Itoa(60*60*24*365))
ctx.Write(body)
有什么我可以在这里做的吗?
你快完成了:
而不是 ctx.Write
使用这个:
ctx.DataFromReader(200, response.ContentLength, *response.ContentType, response.Body, nil)