Java 如何正确使用s3在web应用程序中传递和存储文件?

Java 如何正确使用s3在web应用程序中传递和存储文件?,java,amazon-web-services,amazon-s3,server,Java,Amazon Web Services,Amazon S3,Server,因此,出于运营原因,我们计划将静态内容移动到s3。我只是想了解在处理请求的工作流中,s3应该放在哪里。 如果网站需要一个图像,该请求应该首先命中我们的服务,该服务将从s3(反向代理)获取图像,还是客户端直接请求该文件 如何在文件请求中隐藏文件名、路径名和管理权限 同样的问题也适用于上传新内容 处理s3配额和并行请求 我本来打算发表评论,但这变成了一个完整的答案 要么。如果您的资产是公共资产,那么最轻的方法就是从公共存储桶中请求它们。如果不是这样,那么使用Cloudfront可能比在S3请求中使用

因此,出于运营原因,我们计划将静态内容移动到s3。我只是想了解在处理请求的工作流中,s3应该放在哪里。

  • 如果网站需要一个图像,该请求应该首先命中我们的服务,该服务将从s3(反向代理)获取图像,还是客户端直接请求该文件
  • 如何在文件请求中隐藏文件名、路径名和管理权限
  • 同样的问题也适用于上传新内容
  • 处理s3配额和并行请求

  • 我本来打算发表评论,但这变成了一个完整的答案

  • 要么。如果您的资产是公共资产,那么最轻的方法就是从公共存储桶中请求它们。如果不是这样,那么使用Cloudfront可能比在S3请求中使用自己的身份验证更容易

  • 您可以在
    S3中使其看起来像您的资产
    A.jpeg
    。您的bucket/A.jpeg
    位于
    yourWebsite.com/A.jpeg
    。如果您还想隐藏文件名
    A
    ,则需要使用例如API网关为您提供文件,而不向前端透露任何有关它的信息。如果是我,我就不会麻烦了

  • 除非你必须这样做,否则不要让用户上传到其他用户下载的同一个bucket。根据用例的不同,有几种上传方法。适合一次性使用。您还可以通过使用向用户提供仅允许写入上载存储桶的AWS凭据

  • 没有S3配额。你要为读写付费。对于一个简单的网站,这些费用将是微乎其微的。如果你担心,你可以。您还可以使用为单个用户创建限制。S3是非常可并行的


  • 1.请求应该到达cloudfront,然后将传递到S3。2.客户端必须请求文件名,您不能隐藏它们。4.什么配额?S3/Cloudfront可以处理无限数量的并行请求。要添加到@jordanm的注释中,如果S3中的内容是私有的,则需要授权访问它。您可以通过将请求代理到内容(如您所建议的)来实现这一点,或者您的web服务器可以为S3中的每个文件创建S3预签名URL,并将这些URL插入到网页内容中。预签名URL是让您的应用程序管理访问的一种很好的方式,但让S3服务于内容。见: