Java - 充当文件上传到 S3 的中间人

标签 java file-upload amazon-web-services amazon-s3

我正在尝试找出允许客户将媒体(照片和视频)上传到我的 S3 存储桶的最简单方法,而无需授予他们直接访问权限或使用预签名 URL。

我的想法是,我不希望发生任何类型的媒体处理,我唯一感兴趣的是保护 S3 存储桶不与客户端直接接触,并记录有关正在上传的文件的信息(例如大小、类型等)。

您对如何以简单的方式实现此架构有什么想法吗?

最佳答案

从移动应用上传

要将文件从移动应用程序上传到 Amazon S3:

  • 在您的后端,使用 AWS Security Token Service生成临时凭证
  • 将凭据传递到您的移动应用
  • 移动应用程序随后可以调用 AWS API

临时凭证可以被授予一组有限的权限(例如上传到特定存储桶和路径),并且仅在有限的时间内有效,最多一小时。这是良好的安全实践,因为移动设备上不会保留永久凭据。

从网页上传

通过 HTML 表单使用基于浏览器的上传。这允许 HTML 页面中的表单直接安全地上传 Amazon S3 - 甚至上传到私有(private)文件夹。它使用签名策略来定义允许的操作(例如上传到特定位置、达到特定文件大小、使用特定权限集)。

表单可以是静态的——无需为要上传的每个单独文件重新计算签名。

参见:Authenticating Requests in Browser-Based Uploads Using POST

关于Java - 充当文件上传到 S3 的中间人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347766/

相关文章:

java - 二叉树递归InOrder方法混淆

javascript - 使用 ExtJS 异步发布文件的最佳方式

node.js - 我们可以在不完全上传的情况下限制上传文件大小吗?

amazon-web-services - AWS - 无需通过 SSH 即可获取实例 ID

java - Hibernate:尝试更新时出现LockAcquisitionException

java - Hibernate OneToMany 级联映射

java - OpenJPA 在没有 persistence.xml 的代码中创建 EntityManager,具有属性

python - Django:上传的文件没有被垃圾收集,导致内存问题

swift - 解析 REST API key 破坏客户端 key 身份验证

amazon-web-services - 遇到不受支持的属性 SourceSecurityGroupId