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

编程入门 行业动态 更新时间:2024-10-12 03:23:03

使用API <a href=https://www.elefans.com/category/jswz/34/1769301.html style=网关将文件上传到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)

本文发布于:2024-05-07 06:40:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1754873.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网关   文件上传   不适用于   二进制文件   API

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!