网关将文件上传到S3,Lambda(NodeJS)不适用于二进制文件(例如png)"/>
使用API 网关将文件上传到S3,Lambda(NodeJS)不适用于二进制文件(例如png)
我必须将文件上传到S3存储桶(它可以是XML,txt或二进制文件)。此上传是通过API网关端点进行的,该端点调用Lambda函数,然后将文件上传到存储桶中。
const AWS = require('aws-sdk');
const s3 = new AWS.S3();
exports.lambda = async (event, context) => {
let body = Buffer.from(event.body).toString('utf-8')
let size = Buffer.byteLength(body, 'utf-8');
let buffer = Buffer.alloc(size, body, 'utf-8');
let params = {
Bucket: 'XXX-test123',
Key: '<filename.ext>',
Body: buffer
}
let d = await s3.putObject(params).promise();
return {
'statusCode': 200,
'body': JSON.stringify(d)
}
}
如果我像发送event.body
一样发送jèkd€
(例如使用Lambda控制台测试按钮),并像test.txt那样保存,它将正确上载到存储桶中,而当我下载它时,将正确显示。 >
问题是当我通过API网关上传文件时。在这种情况下,“€”之类的字符将显示为“。]”。
更糟糕的是,如果我上传了PNG之类的二进制文件,在这种情况下,文件的大小比原始大小大得多,Apple Preview无法打开它。
错误在哪里?可能与编码有关吗?如果是这样,什么才是正确的?
我必须将文件上传到S3存储桶(它可以是XML,txt或二进制文件)。此上传通过API网关端点进行,该端点调用Lambda函数,然后将文件上传到...
回答如下:我怀疑API Gateway会自动使用base64编码二进制数据。这就是为什么文件更大的原因。尝试使用文本编辑器打开它进行确认。
您可能可以配置API网关以仅将数据传递通过。请参阅此文档页面:https://docs.aws.amazon/apigateway/latest/developerguide/api-gateway-payload-encodings-configure-with-console.html
更多推荐
使用API 网关将文件上传到S3,Lambda(NodeJS)不适用于二进制文件(例如png)
发布评论