Spring应用程序-将Amazon S3上的图像获取到客户端

尼尔西

我正在构建一个在Elastic Beanstalk上托管的Spring Web应用程序。我使用S3存储用户上传的图像,效果很好。我不明白的是如何从S3到客户端获取图像。我发现了三种选择。

1.在控制器中获取图像并将其发送给客户端。像这样:

S3Object object = amazonS3Client.getObject("bucketname", "path/to/image");

2.打开所有图像,并通过客户端中的URL直接访问它。像这样的东西:

 <img src="http://aws.amazon.com/bucket/path/to/image.jpg">

3.使用仅在特定时间有效的签名下载URL。像这样:

GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest("bucketname", "path/to/image");
String url = conn.generatePresignedUrl(request)

我不确定该采用哪种方法。通过Web服务器路由它似乎是不必要的,因为它会加载服务器。由于任何人都可以使用图像,因此向任何人打开URL都可能会增加请求和成本。第三种方法对我来说是新的,还没有真正看到有人练习过这种方法,如果这真的是可行的话,这会使我感到不安全。

那么,通常如何做呢?

以及如何在开发环境和生产环境中使用它。我猜它没有改变吗?还是在开发时使用弹簧轮廓来更改静态内容的位置并仅将S3用于生产是常见的吗?

如果您托管Java脚本,即S3上的CSS,那么最常见的做法是采用方法2并向所有人开放?

罗布·布莱克

对我而言,这取决于您对用户上传的图像的访问控制的要求。

如果图像是不敏感的,即别人是否拥有另一个用户的图像并不重要,那么我将采用方法2。

另一方面,如果某人设法控制了另一个用户的图像将是一场灾难,那么我将采用方法3(或其他一些使令牌访问图像过期的方式)。

我上次这样做时,我选择了方法2,因为图像不敏感。为了防止人们发现图像,我们确实对图像名称应用了哈希函数,但是我对此并没有太大的担心。无论哪种情况,在为图像构造URL时,应用程序都可以轻松定义一个定义明确的存储桶结构。因此,对于您来说,也许考虑一下类似的方法:

  • s3:存储桶名称/图像/用户/ <哈希和盐渍用户名称> / <用户图像>

根据您对开发环境与生产环境的要求,将存储桶名称与Spring配置文件匹配是我们使用的方法。因此,例如:

  1. s3:bucket_name / prod / images / users / user / foo.jpg
  2. s3:bucket_name / dev / images / users / user / foo.jpg

您可能会猜到,我们有名为“ prod”和“ dev”的Spring配置文件。创建图像URL的代码在创建URL时已将当前Spring概要文件的名称考虑在内。很好地隔离环境。

在CSS和Javascript方面,我倾向于在生产S3存储桶中托管混淆/最小化版本,在dev / test存储桶中托管完整版本(主要是为了提高性能,而不是试图隐藏代码)。另外,在您如何在S3中托管CSS / Javascript时,我将使用某种排序版本控制/命名结构,以便您可以确定应用程序正在使用的资源的“版本”。因此,例如:

  • s3:bucket_name / css / app-1.css
  • s3:bucket_name / css / app-2.css

每次将新版本推送到生产环境时,都会更新CSS / Javascript资源的版本。

通过这条路,您可以将S3看作是准备进入广泛生产环境的一段Javascript / CSS的最终安息之地。一旦到达那里,您就知道它永远不会改变。如果CSS / Javascript确实发生了变化,则用户必须从S3获取新资源,因为版本将会增加。您可以将其挂接到构建过程中,以便您的主应用程序始终引用最新版本的CSS / Javascript。我发现它具有两个有用的功能:

  1. 使确定应用程序运行哪个版本的资源变得非常容易
  2. 您可以非常轻松地缓存资源(无论是使用浏览器还是CloudFront之类的资源),因为您知道它们永远不会改变

希望能有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring应用程序-将Amazon S3上的图像获取到客户端

来自分类Dev

如何将spring-boot作为客户端应用程序运行?

来自分类Dev

在Spring MVC Web应用程序中从Amazon S3服务下载上传的文件

来自分类Dev

将mongodb绑定到Bluemix上的Spring应用程序

来自分类Dev

带有移动和Web客户端的Amazon Web Services上的Java应用程序

来自分类Dev

带有移动和Web客户端的Amazon Web Services上的Java应用程序

来自分类Dev

应用程序关闭时将文件传输到 Amazon S3

来自分类Dev

在Amazon AWS上启动Spring Boot应用程序,如何设置目标运行时

来自分类Dev

作为客户端应用程序,我如何从Amazon Load Balancers(ALB)获取'x-amzn-oidc- *'标头?

来自分类Dev

在您的Web应用程序中,将文件上传到S3时,从客户端直接将它们上传到S3是否安全?

来自分类Dev

在您的Web应用程序中,将文件上传到S3时,从客户端直接将它们上传到S3是否安全?

来自分类Dev

使用客户端应用程序在非SSL中更新Amazon RDS SSL / TLS证书

来自分类Dev

使用上传到Amazon S3的JQuery文件在客户端调整图像大小

来自分类Dev

在Android应用程序中从Amazon s3下载之前获取文件的大小

来自分类Dev

将文件上传到 Amazon s3 - 客户端 javascript

来自分类Dev

发布应用程序后如何将数据发送到客户端应用程序

来自分类Dev

发布应用程序后如何将数据发送到客户端应用程序

来自分类Dev

什么是好的Amazon S3客户端?

来自分类Dev

什么是好的Amazon S3客户端?

来自分类Dev

Android将通知消息发送到设备,而设备上未安装客户端应用程序

来自分类Dev

将图像插入python应用程序

来自分类Dev

单页应用程序+ Amazon S3 + Amazon CloudFront + Prerender.io-如何设置?

来自分类Dev

从移动应用程序将图像上传到AWS S3

来自分类Dev

从客户端Excel文件将Excel加载到应用程序中

来自分类Dev

将MySQL连接到Java客户端/服务器应用程序

来自分类Dev

将外部登录令牌从Identity Server流到客户端应用程序

来自分类Dev

使用调试/崩溃报告将应用程序部署到客户端

来自分类Dev

将应用程序部署到Google App Engine,并希望启动api和客户端

来自分类Dev

将UUID插入由客户端应用程序生成的Postgres是否合法?

Related 相关文章

  1. 1

    Spring应用程序-将Amazon S3上的图像获取到客户端

  2. 2

    如何将spring-boot作为客户端应用程序运行?

  3. 3

    在Spring MVC Web应用程序中从Amazon S3服务下载上传的文件

  4. 4

    将mongodb绑定到Bluemix上的Spring应用程序

  5. 5

    带有移动和Web客户端的Amazon Web Services上的Java应用程序

  6. 6

    带有移动和Web客户端的Amazon Web Services上的Java应用程序

  7. 7

    应用程序关闭时将文件传输到 Amazon S3

  8. 8

    在Amazon AWS上启动Spring Boot应用程序,如何设置目标运行时

  9. 9

    作为客户端应用程序,我如何从Amazon Load Balancers(ALB)获取'x-amzn-oidc- *'标头?

  10. 10

    在您的Web应用程序中,将文件上传到S3时,从客户端直接将它们上传到S3是否安全?

  11. 11

    在您的Web应用程序中,将文件上传到S3时,从客户端直接将它们上传到S3是否安全?

  12. 12

    使用客户端应用程序在非SSL中更新Amazon RDS SSL / TLS证书

  13. 13

    使用上传到Amazon S3的JQuery文件在客户端调整图像大小

  14. 14

    在Android应用程序中从Amazon s3下载之前获取文件的大小

  15. 15

    将文件上传到 Amazon s3 - 客户端 javascript

  16. 16

    发布应用程序后如何将数据发送到客户端应用程序

  17. 17

    发布应用程序后如何将数据发送到客户端应用程序

  18. 18

    什么是好的Amazon S3客户端?

  19. 19

    什么是好的Amazon S3客户端?

  20. 20

    Android将通知消息发送到设备,而设备上未安装客户端应用程序

  21. 21

    将图像插入python应用程序

  22. 22

    单页应用程序+ Amazon S3 + Amazon CloudFront + Prerender.io-如何设置?

  23. 23

    从移动应用程序将图像上传到AWS S3

  24. 24

    从客户端Excel文件将Excel加载到应用程序中

  25. 25

    将MySQL连接到Java客户端/服务器应用程序

  26. 26

    将外部登录令牌从Identity Server流到客户端应用程序

  27. 27

    使用调试/崩溃报告将应用程序部署到客户端

  28. 28

    将应用程序部署到Google App Engine,并希望启动api和客户端

  29. 29

    将UUID插入由客户端应用程序生成的Postgres是否合法?

热门标签

归档