views:

298

answers:

3

Hi,

I want to store the images related to a each person's profile in the DB and retrieve them when requested and save it as .jpg file - and display it to the users.

How could I render the image data stored in the DB as an image and store it locally??

+1  A: 

Why don't you simply store the images on the file system, and only store their references on the database. That's a lot more elegant, and won't consume loads of your database.

Also, you won't have to use any kind of binary functions to read them from the DB, saving memory and loading time.

Is there a very specific reason why you wanna store it on the DB?

Cheers

Marcos Placona
+1  A: 

The standard approach is to convert image to JPG only once, when it is get uploaded. Then save it as a regular file on file system. Use DB just to store relative path to saved image.

When you want to render it just use HTML:

<img src="/images/relative/path/to/my/image.jpg" />

and setup your web-server (nginx, lighttpd, whatever) to serve directory you save images to under virtual directory /images

nailxx
+5  A: 

This StackOverflow Question is a good one to start with when figuring out whether to store images in a DB or on a filesystem

http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay

I have also written about the issues on my blog

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/12/03/images-in-databases-part-i-what-to-store.aspx

http://www.atalasoft.com/cs/blogs/loufranco/archive/2007/12/04/images-in-databases-part-ii-web-images-are-random-access.aspx

http://www.atalasoft.com/cs/blogs/loufranco/archive/2009/04/28/document-storage-database-blobs-or-the-filesystem.aspx

The short answer is: if the images are small and there aren't a lot of them -- a blob in the DB is probably fine (easier to backup, control access, transactions, etc). But the performance is bad compared to the filesystem -- it's a tradeoff. Most real applications (and especially big websites) use the filesystem, but it's perfectly reasonable to use blobs in some cases.

The blob (or file) is just going to be the encoded data (JPG) -- it's the exact same stream of bytes. In a web app, you would use an img tag -- if you are building a desktop GUI, look at what components it has for displaying images.

If you are using a blob, and need to display in a web app, the src of the img tag will be set to a script/view/etc that returns a content-type set to the mime-type of the image (e.g. image/jpeg) and the content of the blob.

Lou Franco