2016-03-18 46 views
0

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

后端有义务先将该图像存储在文件系统中以便知道图像文件的大小(并且避免读取比特定最大值更多的字节),因为S3需要沿着发送PUT对象请求与文件内容长度。

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

非常感谢您提前。

回答

0

如上所述,您可能会在客户端获得文件大小here,但考虑浏览器支持。 您不应该与客户端代码共享您的密钥。我相信在这种情况下应该使用查询字符串验证。

0

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

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

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

new PutObjectRequest(String bucketName, 
       String key, 
       InputStream input, 
       ObjectMetadata metadata) 
相关问题