AWS Node Lambda发送回二进制映像作为响应

时间:2017-10-16 18:28:02

标签: node.js image lambda binary-data

我正在使用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 =发送哪些更改以发回浏览器可用于加载图像的二进制数据。

1 个答案:

答案 0 :(得分:0)

我选择了这个解决方案:

变化:

        .then((outputBuffer) => {
          const newImage = "data:" + res.headers["content-type"] + ";base64," + new Buffer(outputBuffer).toString('base64');
          resolve(newImage);
        })

要:

        .then((outputBuffer) => {
          resolve(outputBuffer);
        })

这将以二进制格式返回缓冲区,而无需自己执行任何操作。