从webapp上传图像到S3而不将其存储在服务器中

时间:2016-03-18 21:02:17

标签: javascript java amazon-web-services amazon-s3

我有一个带有Javascript前端和Java后端的Web应用程序。 我有一个用例,用户可以上传他们的个人资料图片。用例很简单:从用户浏览器发送图像并将其存储在具有最大文件大小的S3中。目前,前端将图像数据流发送到后端,并使用AWS Java SDK将图像存储在S3中。

后端必须先将此图像存储在文件系统中,以便了解图像文件的大小(并避免读取超过某个最大值的字节数),因为S3需要发送PUT对象请求以及文件内容长度。

我可以通过AWS使用其他任何方式吗?使用其他服务?也许Lambda?我不喜欢这种必须先将文件存储在文件系统中然后再打开一个流以将其发送到S3的方法。

非常感谢你。

2 个答案:

答案 0 :(得分:0)

您可能会按照here提到的客户端文件大小,但请考虑浏览器支持。 您不应该使用客户端代码共享密钥。我相信在这种情况下应该使用查询字符串身份验证。

答案 1 :(得分:0)

假设您的最大文件大小小于可用内存,为什么不能在byte[]或类似的内容中读取它,您可以将其发送到S3而不将其写入磁盘。你也应该能够以这种方式获得尺寸。

取决于您使用的S3 java客户端。如果它允许您从ByteArrayInputStream读取,那么您应该能够做任何事情。

看起来您可以使用InputStream。见javadoc

new PutObjectRequest(String bucketName,
                String key,
                InputStream input,
                ObjectMetadata metadata)