英文:
how to read a file from form-Data in an AWS Lambda function
问题
以下是翻译好的部分:
我正在尝试将PDF或文本文件发送到AWS Lambda函数(Node JS)。我希望能够在Lambda函数中处理这个文件。我知道通常最佳做法是使用来自S3存储桶的触发函数。但是,我想要能够从formdata发送这个文件到Lambda函数,从文件中提取信息,然后返回提取出的信息。
我已经能够首先将文件编码为64位二进制数据,并通过JSON将其发送到AWS Lambda,但通常当我尝试在Lambda函数中解码文件(特别是PDF文件)时,文件会损坏或为空。
图像文件似乎很适合这种类型的编码,但对于PDF文件一直没有成功。非常感谢任何帮助。除了使用base64进行编码之外,是否有一种方法可以从formdata获取文件?我的代码如下:
export const handler = async(event) => {
console.log("event", event)
var converted = atob(event.body) // 相反,我应该如何从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;
};
非常感谢!
英文:
I am trying to send a PDF or text file to an AWS Lambda function (Node JS). I'd like to be able to process this file in the lambda function. I know often the best practice is to use a trigger function from an s3 bucket. However, I'd like to be able to send this lambda function a file from formdata, extract information from the file and then return the extracted info back.
I have been able to first encode the file in 64 bit binary data and send it to AWS lambda via a JSON, but often when I try to decode the file (especially a PDF) in the Lambda Function it is corrupted or empty.
Image files seem to work well for this type of encoding, but been unsuccessful with PDFs. Any help greatly appreciated. Rather then encode in base 64 is there a way I can obtain the file from a formdata? My code is below:
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;
};
thanks so much
答案1
得分: 3
我假设您正在使用API网关来触发Lambda函数。在这种情况下,您需要按照文档中提到的步骤启用API网关中的multipart/form-data
。文档的要点如下:
- 在设置窗格中,在二进制媒体类型部分选择添加二进制媒体类型。在输入文本字段中键入所需的媒体类型,例如
image/png
。 - 在代理方法的请求标头中添加
Content-Type
和Accept
。 - 将这些相同的标头添加到集成请求标头中。
- 部署API
附注:如果您正在使用Lambda代理集成({proxy+}),只需要完成步骤1和步骤4。
英文:
I assume that you are using an API gateway to trigger the lambda function. In that case, you have to enable multipart/form-data
in API gateway as mentioned in the documentation. The gist of the documentation is as follows:
- In the Settings pane, choose Add Binary Media Type in the
Binary Media Types section. Type a required media type, for example,image/png
, in the input text field. - Add
Content-Type
andAccept
to the request headers for your proxy method. - Add those same headers to the integration request headers.
- Deploy the API
PS: If you are using Lambda Proxy integration ({proxy+}, just steps 1 and 4 are enough.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论