从API网关和Lambda查看JPG文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从API网关和Lambda查看JPG文件相关的知识,希望对你有一定的参考价值。

我使用节点在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网关时。我遇到了以下错误。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9YM0hHaC5wbmcifQ==” alt =“在此处输入图像描述”>

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

我不确定该如何解决。

答案

您的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)您必须呼叫回叫。

2)axios调用的结果是图像在.data中的对象>

整体代码:

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

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,
    
  );

以上是关于从API网关和Lambda查看JPG文件的主要内容,如果未能解决你的问题,请参考以下文章

AWS - 从公共 API 网关到 VPC 内 lambda 的路由

AWS Lambda 网关 API 给出错误消息

如何避免通过重新映射无服务器框架从 Lambda 传递回 API 网关的标头?

我是不是需要在 Lambda 和 API 网关中验证 AWS Cognito 令牌?

如何使用 AWS API 网关和 Lambda 通过 CORS?

使用 Lambda 授权方的 AWS Cognito 和 API 网关