Phidelux
Phidelux

Reputation: 2271

Storing Images of a Java based REST service running on Heroku

I am currently developing my first Java based RESTful service that should be run on Heroku. This service manages some objects that have associated images. As Heroku is not able to store this images (apart from storing them in a database), I thought of using an external Content Delivery Network (CDN) like Amazon CloudFront. My first attempt to implement this would be as followed:

  1. Encode the image (base64) on the client side.
  2. Send the encoded image encapsulated in Json to the server side.
  3. Decode the image on the server side.
  4. Process the image (scale, create thumbnails, etc.).
  5. Store the image in Amazon's CloudFront using the AWS SDK for Java.
  6. Store a link to the image with the associated object in a postgreSQL database.

Now my question is, if this is the way to go, or if there is a better way to do this and if this GitHub project is a good point to start. If this helps to give an answer - the images are used within desktop and mobile as well as in web-applications.

Upvotes: 2

Views: 802

Answers (1)

BraveNewCurrency
BraveNewCurrency

Reputation: 13065

Store the image in Amazon's CloudFront using the AWS SDK for Java.

Er, CloudFront doesn't store things, it caches things. If you want it stored, you need to put the image on S3 and pay for it every month.

Encode the image (base64) on the client side

Er, why? Just do a PUT or multipart-mime POST, and send the file as bytes.

Send the encoded image encapsulated in Json to the server side

Again, there's no reason to encode it, you can send the metadata + data in the same POST easily without encoding.

Store a like to the image with the associated object in a postgreSQL database

Storing images in a database is an anti-pattern. It makes the database harder to backup, slower to query, etc. Generally, you want to put the image in S3, and store the path in the database.

Upvotes: 1

Related Questions