使用最大内容长度为Amazon S3生成预签名的PUT URL

时间:2016-07-04 15:10:12

标签: java amazon-web-services amazon-s3 put pre-signed-url

我正在尝试生成一个预先签名的URL,客户端可以使用该URL将图像上传到特定的S3存储桶。我已成功生成对GET文件的请求,如下所示:

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

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

现在我正在尝试创建一个允许用户输入文件的URL,但我无法弄清楚如何设置最大内容长度。我确实找到了关于pigz的信息,但我更喜欢在这里使用PUT - 我也想避免构建JSON,尽管这似乎不可能。

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

1 个答案:

答案 0 :(得分:0)

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

public static void checkUpload(S3EventNotification event) {

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

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

这远非理想,因为上传不符合标准似乎会起作用,但之后根本就不会出现(因为S3会在上传时发出200状态代码而不关心Lambda的回应是什么)。 / p>

这实际上是一种解决方法而不是解决方案,所以我不会接受这个答案。