从API网关和Lambda查看JPG文件

时间:2019-12-20 16:10:14

标签: node.js lambda aws-api-gateway

我使用node在lambda上创建了一些代码。

const fs= require('fs');
const axios= require('axios');

exports.handler= async (event, context, callback) => {

  const imageBase64= await axios.get(
    'https://upload.wikimedia.org/wikipedia/commons/8/84/Prunus_flower.jpg',
    {responseType: 'arraybuffer'}
    ).toString('base64');

  return {
    statusCode: 200,
    headers: { 'Content-Type': 'image/jpeg' },
    body: imageBase64,
    isBase64Encoded: true,
    }
}

我还设置了API网关。

二进制媒体类型为 image/*

然后,当我访问API网关时。 我遇到了以下错误。 enter image description here

https://p9knlxmx62.execute-api.ap-northeast-1.amazonaws.com/img/

我不确定该如何解决。

2 个答案:

答案 0 :(得分:0)

您的imageBase64不是有效的Base64图片字符串。

要获取图像文件形式的url并使用axios转换为base64字符串,您可以看到我的代码:

...
const response = await axios.get(
  'https://upload.wikimedia.org/wikipedia/commons/8/84/Prunus_flower.jpg',
  { responseType: 'arraybuffer' }
);
const imageBase64 = Buffer.from(response.data, 'binary').toString('base64');
...

答案 1 :(得分:0)

1)您必须呼叫回叫。

2)axios调用的结果是图像位于.data

中的对象

整体处理程序代码:

exports.handler= async (event, context, callback) => {

  const imageBody = await axios.get(
    'https://upload.wikimedia.org/wikipedia/commons/8/84/Prunus_flower.jpg',
    {responseType: 'arraybuffer'}
  );

  callback(null, {
      statusCode: 200,
      headers: { 'Content-Type': 'image/jpeg' },
      body: imageBody.data.toString('base64'),
      isBase64Encoded: true,
    }
  );
}