DevTony
DevTony

Reputation: 33

Most suitable location to store uploaded images using the Spring Framework

I am currently developing a web application for a local company using Java, Spring Framework and MySQL no ORM. This is the first time I have dealt with uploading files.

My situation is that part of the system allows an admin user to upload images for store items.

currently all my resources such as images are organised and located like such: (located in the unpacked .war at the ROOT of my tomcat server)

/resources/img/items/
/resources/img/items/thumbnails

However I have come to the realisation that when the web app is deployed and a user uploads an image, it will be stored in the above locations. Therefore when I redeploy, the uploaded images will not be present.

My question, is there a better location to store these images? Or am I missing something. I have been researching for the past couple of hours and seem to have not gotten far. I'd be very thankful to anyone who could offer some knowledge. Thanks in advance.

Upvotes: 1

Views: 448

Answers (1)

Jan B.
Jan B.

Reputation: 6448

There are many options where to store files.

MySQL: Store them in your MySQL database using the BLOB datatype. The advantage is that you have all your persistent data in a single location which is handy when doing backups. On the other hand, image data may bloat your database quickly.

In the file system: Store them in the file system, e.g. in /var/yourapp/uploaded-images. You need to tell your application about where to find that directory. There are many ways to do this:

  • create a configuration table in your MYSQL and put the folder there
  • let your web container/server provide that variable
  • via JNDI service
  • ...

Make sure you have a rescue plan when that disk crashes with tons of data ^^

Separate Database Since image data may bloat your database quickly, you may want to use another database for your images. In many architectures binary data are separated from the "real" business data.

I guess these are the typical solutions to your problem. However, there is no standard recommendation what to choose for it depends on facts you didn't provide, or cannot provide at the moment:

  1. Are the images business-critical (technical drawings)
  2. Size of the images (8kB JPEG vs. 200 MB raw image)
  3. What are the demands of your users and who are they (SaaS vs small intranet application)
  4. ... many more ;)

Whatever you choose, it is better than storing files in the exploded war :)

Upvotes: 2

Related Questions