在 AWS Lambda (Python) 中将文件从 multipart/form-data 上传到 S3
Upload files to S3 from multipart/form-data in AWS Lambda (Python)
我正在通过 API 网关调用此 Lambda 函数。我的问题是图像文件格式不正确,这意味着它无法打开。
import boto3
import json
def lambda_handler(event, context):
print(event)
# removing all the data around the packet
# this also results in a malformed png
start = '<?xpacket end="r"?>'
end = '\r\n------'
content = str(event['body'])
content = content[content.index(start) + len(start):content.index(end)].encode('utf-8')
bucket_name = "bucket-name"
file_name = "hello1.png"
lambda_path = "/tmp/" + file_name
s3_path = file_name
s3 = boto3.resource("s3")
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=content)
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin': '*',
},
'body': json.dumps(event)
}
Lambda 的同步调用负载限制为 6mb,异步调用负载限制为 256KB。
https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
此外 api 网关对 RESTfull API 的限制为 10MB,对套接字消息的限制为 128KB
https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
这可能是文件部分上传,部分上传失败的主要原因。
即使您没有达到较小文件大小的限制,您也需要在上传时为 lambda 执行付费。这只是在浪费 lambda 的时间。
api 网关上也可能有配置,用于在将负载推送到 lambda 时修改负载。确保在命中 lambda 之前没有可转换请求的活动模板,并检查是否在 gateway-api 仪表板上为此资源检查了使用 lambda 作为代理。
要上传到 S3,最好使用预签名 URL 进行 Amazon S3 PUT 操作:
https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-presigned-urls.html
我正在通过 API 网关调用此 Lambda 函数。我的问题是图像文件格式不正确,这意味着它无法打开。
import boto3
import json
def lambda_handler(event, context):
print(event)
# removing all the data around the packet
# this also results in a malformed png
start = '<?xpacket end="r"?>'
end = '\r\n------'
content = str(event['body'])
content = content[content.index(start) + len(start):content.index(end)].encode('utf-8')
bucket_name = "bucket-name"
file_name = "hello1.png"
lambda_path = "/tmp/" + file_name
s3_path = file_name
s3 = boto3.resource("s3")
s3.Bucket(bucket_name).put_object(Key=s3_path, Body=content)
return {
'statusCode': 200,
'headers': {
'Access-Control-Allow-Origin': '*',
},
'body': json.dumps(event)
}
Lambda 的同步调用负载限制为 6mb,异步调用负载限制为 256KB。
https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html
此外 api 网关对 RESTfull API 的限制为 10MB,对套接字消息的限制为 128KB
https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html
这可能是文件部分上传,部分上传失败的主要原因。
即使您没有达到较小文件大小的限制,您也需要在上传时为 lambda 执行付费。这只是在浪费 lambda 的时间。
api 网关上也可能有配置,用于在将负载推送到 lambda 时修改负载。确保在命中 lambda 之前没有可转换请求的活动模板,并检查是否在 gateway-api 仪表板上为此资源检查了使用 lambda 作为代理。
要上传到 S3,最好使用预签名 URL 进行 Amazon S3 PUT 操作:
https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-presigned-urls.html