我正在使用AWS Node Lambda调整图像大小并以二进制格式发回该图像,我不确定我是否正确处理此图像。基本上,我想在我的响应中发送二进制数据,使其可以在没有任何前端更改的情况下加载。我有一个非常好的版本工作,返回base64数据,但我怎么修改它来返回二进制?
这是我的调整大小功能:
function imageSizer(url, args) {
return new Promise((resolve, reject) => {
bufferRequest.get(url, args, function (err, res, body) {
if (err) {
console.log(err);
reject(err);
}
const originalFormat = url.includes('png') ? 'png' : 'jpeg';
let newSize = (args.exact === true)
? sharp(body).resize(args.width, args.height)
: sharp(body).resize(args.width, args.height).max();
newSize.toFormat(originalFormat)
.toBuffer()
.then((outputBuffer) => {
const newImage = "data:" + res.headers["content-type"] + ";base64," + new Buffer(outputBuffer).toString('base64');
resolve(newImage);
})
.catch((error) => {
console.log(error);
reject(error);
})
});
})
}
这是我的经纪人:
function handler(event, context) {
imageSizer(event.url, event.queryStringParameters);
.then((result) => {
context.succeed({
statusCode: 200,
headers: { 'Content-Type': 'image/jpeg'},
body: result
});
})
.catch((error) => {
context.succeed({
statusCode: 502,
headers: { 'Content-Type': 'application/json' },
body: `Error sizing image ${error}`
});
})
}
如上所述,这适用于base64,但我不确定要对const newImage =
发送哪些更改以发回浏览器可用于加载图像的二进制数据。
答案 0 :(得分:0)
我选择了这个解决方案:
变化:
.then((outputBuffer) => {
const newImage = "data:" + res.headers["content-type"] + ";base64," + new Buffer(outputBuffer).toString('base64');
resolve(newImage);
})
要:
.then((outputBuffer) => {
resolve(outputBuffer);
})
这将以二进制格式返回缓冲区,而无需自己执行任何操作。