我正在尝试生成一个预先签名的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。
答案 0 :(得分:0)
虽然我还没设法在上传时限制文件大小,但我最终创建了一个Lambda函数,该函数在上传到临时存储桶时被激活。该功能具有如下所示的签名
public static void checkUpload(S3EventNotification event) {
(这是值得注意的,因为我在网上找到的所有指南都指向一个似乎不再存在的S3Event类)
该函数提取文件的元数据(不是文件本身,因为这可能算作大型下载)并检查文件大小。如果可以接受,则下载文件,然后将其上传到目标存储桶。如果没有,它只是删除文件。
这远非理想,因为上传不符合标准似乎会起作用,但之后根本就不会出现(因为S3会在上传时发出200状态代码而不关心Lambda的回应是什么)。 / p>
这实际上是一种解决方法而不是解决方案,所以我不会接受这个答案。