通过 Amazon API 网关和 lambda 上传图像

问题描述 投票:0回答:3

我有一个带有

API gateway
Lambda
的 REST API。 我不想创建一个用于上传个人资料图片的端点,该端点将文件传递到
Lambda
函数,在该函数中调整文件大小,将其注册到数据库并返回新图像的 url 路径。

有什么办法可以使用这些服务吗? 在网上找不到任何东西(我发现的唯一建议是直接上传到 S3,这需要 IAM 权限,并有一个事件触发 Lambda 函数来调整图片大小)。

谢谢

更新

AWS 更新了 APIGATEWAY,并且知道您可以 通过端点发送二进制文件
感谢@blue 和@Manzo 的评论

file-upload amazon-s3 aws-lambda aws-api-gateway
3个回答
4
投票

将文件直接上传到 S3 不一定需要 IAM 权限。您将创建一个返回预签名 S3 URL 的 API 端点,然后可以使用该端点将文件直接上传到 S3。 API 端点后面的 Lambda 函数将是唯一需要 S3 存储桶正确 IAM 权限的函数。


1
投票

由于 API Gateway 和 Lambda 目前原生不支持,您可以将文件传递给 API Gateway 编码的基于 64 位的图片,然后传递给 Lambda 函数。您的 Lambda 函数可以基于 64 解码,然后调整大小,将其注册到数据库并返回新图像的 url 路径。


0
投票

要发出 put 请求并将请求正文中的图像/文件传递到 Python(Flask)中的 API 网关 url,您可以使用:

file = request.files['file']

headers = {'Content-Type': file.content_type, 'x-amazon-apigateway-binary-media-types': 'image/jpeg' }

api_url = '<url_endpoint>'

file.seek(0)
file_data = file.read()

response = requests.put(api_url,file_data, headers=headers)
© www.soinside.com 2019 - 2024. All rights reserved.