我有一个带有Javascript前端和Java后端的web应用程序。我有一个用例,用户可以上传他们的个人资料图片。用例很简单:从用户浏览器发送图像并将其存储在具有最大文件大小的S3中。目前,前端将图像数据流发送到后端,后端使用AWS Java SDK将图像存储在S3中。
后端必须预先将此图像存储在文件系统中,以便知道图像文件的大小(并避免读取超过某个最大值的字节),因为S3需要将PUT对象请求与文件内容长度一起发送。
有没有其他方法可以通过AWS来实现这一点?使用其他服务?也许是Lambda?我不喜欢这种必须先将文件存储在文件系统中,然后再次打开流才能将其发送到S3的方法。
非常提前感谢您。
发布于 2016-03-19 08:16:08
您可能会像前面提到的here那样在客户端获得文件大小,但请考虑浏览器支持。您不应该与客户端代码共享您的密钥。我认为在这个场景中应该使用查询字符串身份验证。
发布于 2016-03-19 08:21:18
假设您的最大文件大小小于您的可用内存,为什么您不能直接在byte[]或类似的文件中读取它,您可以将它发送到S3,而不将其写入磁盘。您还应该能够以这种方式获得大小。
取决于您正在使用的S3 java客户端。如果它允许你从ByteArrayInputStream中读取数据,那么你应该可以做任何事情。
看起来你可以使用InputStream了。参见javadoc。
new PutObjectRequest(String bucketName,
String key,
InputStream input,
ObjectMetadata metadata)https://stackoverflow.com/questions/36094157
复制相似问题