NodeJS 如何在AWS Lambda函数中从表单数据读取文件

4jb9z9bj  于 2023-01-08  发布在  Node.js
关注(0)|答案(1)|浏览(225)

我正在尝试发送一个PDF或文本文件到AWS Lambda函数( NodeJS )。我希望能够在lambda函数中处理这个文件。我知道通常最好的做法是使用来自s3桶的触发器函数。但是,我希望能够从formdata向这个lambda函数发送一个文件,从文件中提取信息,然后返回提取的信息。
我已经能够首先将文件编码为64位二进制数据,并通过JSON将其发送到AWS lambda,但当我尝试在Lambda函数中解码文件(尤其是PDF)时,文件经常损坏或为空。
图像文件看起来可以很好的进行这种类型的编码,但是在PDF中却不成功。任何帮助都非常感谢。而不是在base 64中编码,有没有办法可以从formdata中获得该文件?我的代码如下:

export const handler = async(event) => {
   
    console.log("event", event)
    
    var converted = atob(event.body) // RATHER HOW WOULD I READ A FILE FROM FORMDATA


     const response =  {
        "statusCode": 200,
        "headers": {"Content-Type":"text/html", //"application/pdf", // "multipart/form-data", //
            "Access-Control-Allow-Origin":"*",
            "Access-Control-Allow-Headers":"Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token"
                        
        },
        "body": event,
        "isBase64Encoded": true
        }
        
    return response;
};

非常感谢

carvr3hs

carvr3hs1#

我假设您使用的是API网关来触发lambda函数,那么您必须在API网关中启用multipart/form-data,如documentation中所述,文档的要点如下:
1.在"设置“窗格中,选择”二进制媒体类型“部分中的”**添加二进制媒体类型“。在输入文本字段中键入所需的媒体类型,例如image/png
1.将Content-TypeAccept添加到代理方法的请求头中。
1.将这些相同的标题添加到集成请求标题中。
1.部署API
PS:如果您使用的是Lambda代理集成({proxy+},只需步骤1和4就足够了。

相关问题