2016-07-04 123 views
3

我正尝试生成客户端可用于将图像上传到特定S3存储桶的预签名URL。我已经成功地生成的请求,以获取文件,就像这样:为Amazon S3生成最大内容长度的预签名PUT url

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

其中到期和方法日期和列举HTTPMethod分别对象。

现在我试图创建一个URL来允许用户PUT文件,但我无法弄清楚如何设置最大内容长度。我找到了有关POST policies的信息,但我更愿意在这里使用PUT - 我也想避免构建JSON,尽管这看起来不可能。

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

回答

1

尽管我没有设法限制上传文件的大小,但我最终创建了一个在上传到临时存储区时激活的Lambda函数。该函数有一个像下面

public static void checkUpload(S3EventNotification event) { 

签名(这是值得注意的,因为到了存在的所有导游我在网上找到指S3Event类似乎并不)

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

这是远远不够理想的,因为上传不符合标准似乎可以正常工作,但之后根本不会出现(因为S3将在上传时发布200状态代码而不关注Lambda的响应)。

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