我有一个带有
API gateway
和 Lambda
的 REST API。
我不想创建一个用于上传个人资料图片的端点,该端点将文件传递到 Lambda
函数,在该函数中调整文件大小,将其注册到数据库并返回新图像的 url 路径。
有什么办法可以使用这些服务吗? 在网上找不到任何东西(我发现的唯一建议是直接上传到 S3,这需要 IAM 权限,并有一个事件触发 Lambda 函数来调整图片大小)。
谢谢
更新
AWS 更新了 APIGATEWAY,并且知道您可以 通过端点发送二进制文件
感谢@blue 和@Manzo 的评论
将文件直接上传到 S3 不一定需要 IAM 权限。您将创建一个返回预签名 S3 URL 的 API 端点,然后可以使用该端点将文件直接上传到 S3。 API 端点后面的 Lambda 函数将是唯一需要 S3 存储桶正确 IAM 权限的函数。
由于 API Gateway 和 Lambda 目前原生不支持,您可以将文件传递给 API Gateway 编码的基于 64 位的图片,然后传递给 Lambda 函数。您的 Lambda 函数可以基于 64 解码,然后调整大小,将其注册到数据库并返回新图像的 url 路径。
要发出 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)