最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用API 网关将文件上传到S3,Lambda(NodeJS)不适用于二进制文件(例如png)

网站源码admin15浏览0评论

使用API 网关将文件上传到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

发布评论

评论列表(0)

  1. 暂无评论