为Amazon S3生成带有最大内容长度的预签名PUT url



我试图生成一个预签名的URL,客户端可以使用它来将图像上传到特定的S3桶。我已经成功生成了对GET文件的请求,如下所示:

GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, filename);
urlRequest.setMethod(method);
urlRequest.setExpiration(expiration);

其中expiration和method分别是Date和HttpMethod对象。

现在我正在尝试创建一个URL来允许用户PUT文件,但我不知道如何设置最大内容长度。我确实找到了关于POST策略的信息,但我更喜欢在这里使用PUT——我也想避免构造JSON,尽管这似乎是不可能的。

最后,另一种答案可能是通过某种方式将图像上传从API网关传递到Lambda,这样我就可以在验证文件类型和大小(这不是理想的)后将其从Lambda上传到S3。

虽然我没有设法限制上传时的文件大小,但我最终创建了一个Lambda函数,该函数在上传到临时存储桶时被激活。函数有如下的签名

public static void checkUpload(S3EventNotification event) {

(这是值得注意的,因为我在网上找到的所有指南都引用了一个似乎不再存在的S3Event类)

函数提取文件的元数据(不是文件本身,因为这可能被视为一个大的下载)并检查文件大小。如果可以接受,它将下载文件,然后将其上传到目标存储桶。如果没有,它只是删除文件。

这远不是理想的,因为上传不符合标准似乎可以工作,但随后根本不会显示(因为S3将在上传时发出200状态码,而不关心Lambda的响应是什么)。

这是一个有效的变通而不是解决方案,所以我不会接受这个答案。

最新更新