如何将从S3收到的文件作为二进制响应发送到Gin?

比方说,我有以下代码从S3 bucket获取图像:

response, err := i.s3Client.GetObject(context.TODO(), &s3.GetObjectInput{
    Bucket: aws.String("test"),
    Key:    aws.String(filename),
})

如何将此响应导入Gin路由的响应上下文?

我可以这样做:

body, err := ioutil.ReadAll(response.Body)
if err != nil {
    ctx.JSON(http.StatusBadRequest, err)
    return
}

但如何让杜松子wine 作为输出?我脑海中浮现的但行不通的是:

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)

Go相关问答推荐

在整个SQL事务中将使用上下文作为默认设置吗?

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

Go 中的sync.Cond 与 Wait 方法

为什么 mux.Vars() 返回空的 map[]

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

Golang 发送Post请求出现400错误

为什么我只收到部分错误而不是我启动的 goroutines 的所有错误?

尽管存在 WaitGroup,Goroutines 似乎被打断了

Go Template if 条件

Yocto 无法交叉编译 GoLang Wails 应用程序

如何匹配两次出现的相同但随机字符串之间的字符

从Go中的随机日期开始以天为单位获取时间

为什么互斥量比 golang 中的通道慢?

通过 golang 中的 gremlin-go 库嵌入 gremlin 服务器

go:识别重新定义标志的包

是否可以使用按位运算在随机 unicode 字符串中找到重复字符?

如何使用带有Electron 表格 ID、Electron 表格名称、表格 ID 和值的 golang 在 googlesheet 中插入数据

Golang 有类似 C++ 的 decltype 的东西吗?

为什么 go-cmp Equal() 说 struct 不是完全相等的,即使所有字段都非常相等?

将基本 HTTP AUth 用户/密码凭据存储在 GO 中,无需外部包