我正在構建託管在Elastic Beanstalk上的Spring Web應用程序。我使用S3來存儲用戶上傳的圖像,效果很好。我不明白的是如何從S3中獲取圖像到客戶端工作。我找到了三種選擇。Spring應用程序 - 將Amazon 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服務器進行路由看起來沒有必要,因爲它會加載服務器。由於任何人都可以使用這些圖像,因此可以向任何人提供更高的請求和費用。第三種方法對我來說是新的,如果這真的是一種方法,我還沒有真正見過任何人這樣做,這讓我感到不安。
那麼,這通常如何完成?
這是如何在開發環境和生產環境中使用的。我猜它不會改變?或者在開發時只使用S3彈簧配置文件來更改靜態內容的位置,並且只用於生產?
如果您在S3上託管Javascript,CSS,那麼最常用的方法2是爲每個人打開它們?
很好的答案謝謝!由於它的非敏感圖像(它的化身),我會去做方法2。你是否將每個圖像url保存到數據庫?由於我不知道圖像擴展名,我想將它保存到數據庫中的每個用戶實體。我的網址如下所示: s3-eu-west-1.amazonaws.com/BUCKETNAME/images/avatars/USERID-avatar.EXTENSION – nilsi 2014-11-09 15:32:29
通常我會盡量避免保存URL,因爲您會遇到不可避免的情況下,URL將會改變,然後你必須更新數據庫。最好能夠生成給定特定用戶的URL。在圖片擴展方面,我會提供兩種選擇,1:強制用戶只上傳特定的擴展名,或者如果不可行,2:將配置文件圖像擴展名存儲在數據庫中(如您所建議的那樣) 。 – 2014-11-09 15:50:54
好的,非常感謝。然後我將保存擴展名。 – nilsi 2014-11-09 15:55:14