我如何在 Amazon API Gateway - Lambda 中使用原始缓冲区而不是 toString 进行响应
How do I respond with a raw buffer instead of toString in Amazon API Gateway - Lambda
到目前为止,这是我的代码 - 我只想 return 将图像缓冲区作为原始数据,而不是将其转换为数组。
我在 http 200 响应的集成响应中将内容类型设置为 image/jpeg,但它是一个损坏的图像,因为我认为它是缓冲区的 toString 而不是原始数据。
exports.handler = function(event, context) {
var srcKey = event.key || 'e_1.png';
var max_size = event.size || 100;
// Download the image from S3
s3.getObject({
Bucket: srcBucket,
Key: srcKey
}, function (err, response) {
if (err)
return context.fail('unable to download image ' + err);
var original = gm(response.Body);
original.size(function (err, size) {
if (err)
return context.fail('unable to download image ' + err);
resize_photo(size, max_size, original, function (err, photo) {
//res.setHeader('Content-Type', 'image/jpeg');
context.succeed(photo);
});
});
});
};
这似乎不是 Lambda
和 API Gateway
的设计目的。考虑到管道的状态,可能不支持二进制输出。尝试做其他事情 - 将图像存储回 S3
并将 HTTP Redirect
发送回新的 S3 URI
。让客户端处理它,而不是试图让 API Gateway
管道处理二进制响应。
到目前为止,这是我的代码 - 我只想 return 将图像缓冲区作为原始数据,而不是将其转换为数组。
我在 http 200 响应的集成响应中将内容类型设置为 image/jpeg,但它是一个损坏的图像,因为我认为它是缓冲区的 toString 而不是原始数据。
exports.handler = function(event, context) {
var srcKey = event.key || 'e_1.png';
var max_size = event.size || 100;
// Download the image from S3
s3.getObject({
Bucket: srcBucket,
Key: srcKey
}, function (err, response) {
if (err)
return context.fail('unable to download image ' + err);
var original = gm(response.Body);
original.size(function (err, size) {
if (err)
return context.fail('unable to download image ' + err);
resize_photo(size, max_size, original, function (err, photo) {
//res.setHeader('Content-Type', 'image/jpeg');
context.succeed(photo);
});
});
});
};
这似乎不是 Lambda
和 API Gateway
的设计目的。考虑到管道的状态,可能不支持二进制输出。尝试做其他事情 - 将图像存储回 S3
并将 HTTP Redirect
发送回新的 S3 URI
。让客户端处理它,而不是试图让 API Gateway
管道处理二进制响应。