Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 通过Amazon API网关和lambda上传图像_File Upload_Amazon S3_Aws Lambda_Aws Api Gateway - Fatal编程技术网

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

File upload 通过Amazon API网关和lambda上传图像,file-upload,amazon-s3,aws-lambda,aws-api-gateway,File Upload,Amazon S3,Aws Lambda,Aws Api Gateway,我有一个带有API网关和Lambda的restapi。 我不想创建一个用于上传配置文件图片的端点,该端点将文件传递到Lambda函数,在该函数中,文件被调整大小,将其注册到数据库并返回新图像的url路径 有没有办法利用这些服务做到这一点? 在网上找不到任何东西(我找到的唯一建议是直接上传到S3,这需要IAM权限,并且有一个事件触发一个调整图片大小的Lambda函数) 谢谢 更新 AWS更新了APIGATEWAY,并且知道您可以 感谢@blue和@Manzo的评论将文件直接上传到S3不一定需要IA

我有一个带有
API网关
Lambda
的restapi。 我不想创建一个用于上传配置文件图片的端点,该端点将文件传递到
Lambda
函数,在该函数中,文件被调整大小,将其注册到数据库并返回新图像的url路径

有没有办法利用这些服务做到这一点? 在网上找不到任何东西(我找到的唯一建议是直接上传到S3,这需要IAM权限,并且有一个事件触发一个调整图片大小的Lambda函数)

谢谢

更新

AWS更新了APIGATEWAY,并且知道您可以

感谢@blue和@Manzo的评论

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

由于API网关和Lambda当前本机不支持,您可以将文件传递到based64编码为API网关的图片,然后传递到Lambda函数。您的Lambda函数可以进行based64解码,然后调整大小,将其注册到数据库并返回新图像的url路径。

谢谢。我试过你说的了。我得到
无法将请求正文解析为json:unrecogned token
。我的
请求temaplate
有一个属性:
有效负载:$input.body
。它应该以字符串形式返回正文(文件),但会抛出一个错误。修复了它!添加
$util.base64Encode()
。该道具如下所示:
“payload”:“$util.base64Encode($input.body)”
。现在我得到一个损坏的文件。它位于
应用程序/octet流上,我无法操作或确定图像类型。有什么解决办法吗?@JoJoB。你能解决这个问题吗。我遇到了同样的问题。@advncd我使用了下面的建议。我有一个端点,它给我一个指向s3 bucket的签名url,然后我直接上传它。您可以使用此标志url的权限、文件类型和文件大小。目前,API网关将每个输入编码为JSON,因此img数据将被破坏(或者至少我不知道如何解码)。我认为他们正在计划向API网关添加更多功能,其中之一是文件上传。你是对的,但我有自己的lambda函数授权用户,并根据他的id将文件保存到s3存储桶中。我不认为让用户获得s3 url然后上传文件是一个好主意,API的目的是抽象逻辑和基础设施,用户不应该处理所有这些事情,甚至不应该知道我们现在使用s3或awsAPI网关支持二进制数据……是的,这里的示例: