我想从一个桶中获取一个.jpg文件并将其发送回api网关.我相信我的设置正确,因为我看到记录的东西.它从s3中抓取文件很好,而gm是graphicsmagick库.不知道我是否正在使用它.
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); } ] );
解决方法
您可以实现获取图像< - > API网关< - > Lambda< - > S3轻松集成.
在lambda中,而不是json,返回image的base64字符串表示形式(buffer.toString(‘base64’)),强制API网关将字符串转换为二进制并添加特定的Content-Type(因此您不需要使用它们的有限二进制支持,强制您发送特定的Accept标头).
在AWS控制台中,转到API Gateway,然后转到相关方法并更新设置:
>集成请求
>取消选中:使用Lambda Proxy集成
>方法响应
>添加回复 – > HTTP状态:200
>添加标题:内容类型
>映射值:’image / jpeg'(单引号)
从命令行,运行以下命令强制将字符串转换为二进制.
首先,从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