2014-03-26 72 views
2

我目前正在開發我的第一個基於Java的RESTful服務,應該在Heroku上運行。該服務管理一些具有關聯圖像的對象。由於Heroku不能存儲這些圖像(除了將它們存儲在數據庫中),我想到使用外部(CDN),如Amazon CloudFront。我第一次嘗試實現這一點如下:存儲在Heroku上運行的基於Java的REST服務的圖像

  1. 在客戶端編碼圖像(base64)。
  2. 將封裝在Json中的編碼圖像發送到服務器端。
  3. 解碼服務器端的圖像。
  4. 處理圖像(縮放,創建縮略圖等)。
  5. 使用適用於Java的AWS SDK將圖像存儲在亞馬遜的CloudFront中。
  6. postgreSQL database中存儲一個帶有關聯對象的圖像的鏈接。現在

我的問題是,如果這是要走的路,或者如果有更好的方法來做到這一點,如果this GitHub project是一個很好的點開始。如果這有助於給出答案 - 圖像在桌面和移動設備以及網絡應用程序中使用。

+0

根據圖像的大小,您也可以直接在PostgreSQL中將圖像存儲爲'bytea'字段或使用'pg_largeobject'。 –

+1

正如我在我的文章中提到的,我知道這是可能的,但是Dynos並不便宜,並且浪費他們的計算能力來交付內容不是一個好主意。此外,我必須處理許多圖像並將圖像存儲在數據庫中,但在大多數情況下,這也不是一個好主意。所以我正在尋找一個使用CDN的解決方案。 – Phidelux

+0

完全合情合理。 –

回答

1

使用適用於Java的AWS開發工具包將映像存儲在Amazon的CloudFront中。

呃,CloudFront不存儲東西,它緩存的東西。如果你想存儲它,你需要把圖像放在S3上,並且每個月都支付一次。在客戶端

編碼圖像的(Base64),爲什麼呢?只需做一個PUT或multipart-mime POST,然後以字節發送文件。

發送封裝以JSON編碼的圖像到服務器端

同樣,沒有理由對它進行編碼,您可以輕鬆地發送在同一職位的元數據+不進行編碼。

商店中的像在PostgreSQL數據庫

在數據庫中存儲的圖像與相關聯的對象的圖像是一個反模式。它使數據庫更難以備份,查詢速度更慢等。一般而言,您希望將映像置於S3中,並將路徑存儲在數據庫中。

+0

感謝您的回答。據我瞭解,這是一條路,我只需要忘記這種解碼和解碼的東西。 '將圖像存儲在數據庫中是一種反模式。「是的,我知道,這是我的文章中的一個錯字。在第六點中它應該是''連接''不'''。我已經在上面對克雷格林格的評論中說過同樣的話。 :-D – Phidelux

+0

按照你的提示,我能夠編寫一個簡單的上傳器,它採用給定的InputStream(無base64編碼),縮放給定的圖像並將其放入Amazon S3存儲桶中。謝謝! – Phidelux