需要麻烦通过nodejs和Lambda损坏来拍摄Http图片下载

时间:2019-06-25 06:12:07

标签: node.js aws-lambda

我创建了一个nodejs http服务器应用程序来下载远程映像,它可以作为独立的节点js应用程序正常工作,但是使用nodejs aws-lambda时下载文件会损坏。

我尝试进入aws网关api设置并设置二进制内容类型以允许所有* / *

request.get('https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png', 
        {encoding:'binary'},function(error, response){
            callback(null, { "statusCode" : 200, "headers": { 
                    'Content-Type': 'application/octet-stream',
                    'Cache-Control': 'no-cache',
                    'Content-Disposition': 'attachment; filename="google.png"',
                    'Accept': 'application/octet-stream'
                }, "body" : response.body});
            });

此代码显示了我的lambda函数内部的内容。似乎收到的文件具有某种utf或编码会破坏它。

问题:

有人遇到过同样的问题,或者可以提供有关导致损坏文件的原因的指导吗?

1 个答案:

答案 0 :(得分:0)

已解决

原来的问题是我需要将图像格式化为base64,然后将isBase64Encoded设置为true。我在下面提供了het的工作代码。

步骤1.进入GUI进行lambda api网关设置,并设置二进制内容类型以允许所有 /

第2步。在响应中,请确保您格式化图像二进制文件,并将其检索为base64,并且还将isBase64Encoded标志传递为true。这将允许您输出文件以供下载。如果不将其格式化为base64并翻转标志,则将获得外观和行为已损坏的文件的编码版本。

        responseType: 'arraybuffer'}).then(response => {
        callback(null, {
            statusCode: 200,
            headers: {
                'Content-Type': 'image/png',
                'Cache-Control': 'no-cache',
                'Content-Disposition': 'attachment; filename="google.png"'
            },
            body: Buffer.from(response.data, 'binary').toString('base64'),
            isBase64Encoded: true
        })
    });