我有一个lambda函数,它在事件中使用输入键从s3获取文件,并需要将其发送到客户端。我正在使用以下函数从s3 获取文件
function getObject(key){
var params = {
Bucket: "my_bucket",
Key: key
}
return new Promise(function (resolve, reject){
s3.getObject(params, function (err, data){
if(err){
reject(err);
}
resolve(data.Body)
})
})
}
如果我将这个promise(缓冲区)的响应发送到context.succeed
,它在前端显示为JSON数组。如何将其作为文件发送?这些文件可以是ZIP或HTTP存档(HAR)文件。s3键包含适当的扩展名。我猜这和API网关中的"集成响应"有关。但无法确定在哪里更改
好消息是,您现在可以处理API网关的二进制输入和输出(公告和文档)。
基本上,Lambda函数中没有任何变化,但您现在可以将contentHandling
API网关集成属性设置为CONVERT_TO_BINARY
。
不幸的是,AWS的官方示例仅展示了HTTP API网关后端,因为AWS Lambda支持似乎尚未完成。例如,我还没有设法从AWS Lambda返回gzipped内容,尽管由于新的二进制支持和$util.base64Decode()
映射实用程序,这应该是可能的。