首页 > 解决方案 > AWS Lambda 正在返回截断的图像(二进制响应)

问题描述

我正在使用以下架构

Cloudfront 在 APIGateway 前面,APIgateway 有 Lambda 代理作为端点。

当用户请求图像时,请求会转到云端,而云端又会转到 APIgateway 和 Lambda 代理。

LambdaProxy 对 CDN 进行 API 调用并获取图像。

现在,APIgateway 每次都返回截断的图像。我不确定下面的代码有什么问题

const axios = require('axios')
// const sharp = require('sharp')
const redis = require('redis')
const aws = require("aws-sdk")

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

    const result = await axios({
        url: "https://cdn.pixabay.com/photo/2020/09/18/19/31/laptop-5582775_1280.jpg", 
        method:"GET" ,
        responseType: 'arraybuffer',
        // headers : lambdaEvent.headers
        })            
            
        const buffer = Buffer.from(result.data)
                const base64Buffer = buffer.toString("base64")
                console.log( "Base64 encoded image is" + base64Buffer)
                
                const imageResponse = {
                    "statusCode" : result.status,
                    "headers":{"Content-type":"image/jpeg"},
                    "body":base64Buffer,
                    "isBase64Encoded": true
                }

            return imageResponse
}

result.data通过在 S3 中创建文件验证了正确的图像。

baseg64Buffer通过在线将 base64Buffer 转换为图像来验证是正确的编码字符串。它向我展示了预期的图像。

但是,APIGateway 响应总是被浏览器截断。

在此处输入图像描述

任何人都可以帮助此代码有什么问题。

标签: amazon-web-servicesaws-lambdaaws-api-gateway

解决方案


推荐阅读