【问题标题】:Upload image to S3 from webapp without storing it in server从 webapp 将图像上传到 S3 而不将其存储在服务器中
【发布时间】:2016-03-18 21:02:16
【问题描述】:
我有一个带有 Javascript 前端和 Java 后端的 Web 应用程序。
我有一个用例,用户可以在其中上传他们的个人资料图片。用例很简单:从用户浏览器发送图像并将其以最大文件大小存储在 S3 中。目前前端将图像数据流发送到后端,后端使用 AWS Java SDK 将图像存储在 S3 中。
后端有义务预先将此图像存储在文件系统中,以便了解图像文件的大小(并避免读取超过某个最大值的字节),因为 S3 要求它发送 PUT 对象请求以及文件内容长度。
还有其他方法可以使用 AWS 做到这一点吗?使用其他服务?也许是拉姆达?我不喜欢这种必须先将文件存储在文件系统中然后再次打开流以将其发送到 S3 的方法。
非常感谢您。
【问题讨论】:
标签:
javascript
java
amazon-web-services
amazon-s3
【解决方案1】:
您可能会在客户端获得文件大小,如 here 所述,但请考虑浏览器支持。
您不应该与客户端代码共享您的密钥。我相信在这种情况下应该使用查询字符串身份验证。
【解决方案2】:
假设您的最大文件大小小于您的可用内存,为什么不能在byte[] 或类似的地方读取它,您可以将其发送到 S3 而无需将其写入磁盘。您也应该能够以这种方式获得尺寸。
取决于您使用的 S3 java 客户端。如果它允许您从ByteArrayInputStream 读取,那么您应该可以做任何事情。
看起来你可以使用InputStream。见javadoc。
new PutObjectRequest(String bucketName,
String key,
InputStream input,
ObjectMetadata metadata)