cmk*_*cmk 5 amazon-s3 amazon-web-services node.js aws-lambda aws-api-gateway
我试图从桶中获取.jpg文件并将其发送回api网关.我相信我的设置正确,因为我看到记录的东西.它从s3中获取文件,gm是graphicsmagick库.不知道我是否正在使用它.
在lambda函数中我这样做(很多代码来自aws示例):
async.waterfall([
function download(next) {
console.log(srcKey);
console.log(srcBucket);
// Download the image from S3 into a buffer.
s3.getObject({
Bucket: srcBucket,
Key: srcKey
},
next);
},
function transform(response, next) {
console.log(response);
next(null, 'image/jpeg', gm(response.Body).quality(85));
},
function sendData(contentType, data, next){
console.log(contentType);
console.log(data);
imageBuffer = data.sourceBuffer;
context.succeed(imageBuffer);
}
]
);
Run Code Online (Sandbox Code Playgroud)
响应头的内容长度为:85948,这似乎不对,因为原始文件只有36kb.谁知道我做错了什么?
您可以轻松实现 Get Image <-> API Gateway <-> Lambda <-> S3 集成。
在 lambda 中,而不是 json,返回图像 ( buffer.toString('base64')) 的 Base64 字符串表示形式,强制 API Gateway 将字符串转换为二进制并添加特定的Content-Type(因此您不需要使用其有限的二进制支持来强制您发送特定的 Accept 标头)。
在 AWS 控制台中,转到 API Gateway,然后转到相关方法并更新设置:
整合请求
方法响应
集成响应 -> 标头映射 -> 响应标头 -> 内容类型
从命令行运行以下命令以强制将字符串转换为二进制。首先,从API网关检索rest-api-id和resource-id。然后,在 CLI 中运行(将rest-api-id 和resource-id 替换为您自己的):
aws apigateway put-integration-response --rest-api-id <rest-api-id> --resource-id <resource-id> --http-method GET --status-code 200 --content-handling CONVERT_TO_BINARY
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9244 次 |
| 最近记录: |