我创建了一个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或编码会破坏它。
问题:
有人遇到过同样的问题,或者可以提供有关导致损坏文件的原因的指导吗?
答案 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
})
});