How do you store images for asp.net application?

.net, asp.net, image, storage

Solution

I made a system similiar to this. In my opinion, page load speed trumps all other considerations so I went with the 'store images on disk' option.

When images are added to the system, the original image is cropped and resized to the desired display size for browsing and a thumbnail is also generated. Three images are then stored to disk, the original, the display size and the thumbnail. Each one has a GUID generated for its filename.

(Imagine shopping on amazon, when you a browsing a list of products only the thumbnail is visible. When you inspect a product its display size is shown, and you can usually click on the image again to see the full size.)

I had a database table that looked a bit like this.

ID                int, PK
FullSizePath      varchar(128)
DisplaySizePath   varchar(128)
ThumbNailPath     varchar(128)
OriginalData      BLOB

I kept the original data in the db just incase there was an accident on the file server and the images got deleted, so they could all be re-generated. But this data is never pulled from the db during a page request.

Problem

We are just upgrading our ASP.Net shop implementation (from simple one) to structure that should be more flexible. I am just looking for some options how to store images related to product. (there will be two types of images, thumb of the product and then full view images of the product). It should handle at least hundred products. So far I am thinking about two options: 1) store images in db - images are loaded from Db into stream then into image (displayed by using IHttpHandler) Pros - The image itself is part of class, business object which we are working with in code behind - one place to maintain product data Cons - memory consumption - traffic increase as we get the product data from other API 2) store images in file system - images are put in page as link Pros - none impact on memory as it is not stored in session, app cache.It is used like simple link - no memory consumption Cons - needs to keep some name convention for images in File system (perhaps even some folder structure) - more complicated maintenance of images Is there any other suitable mechanism? What would you advice to use? Personally I prefer images in file system, but it can be harder to maintain it as there are two separate places. Thanks for any comment. X. BTW: I can really imagine that in some stage the product will also have some videos or any other media that need to be displayed too. In this case Db is not really option, isn't it?

Original source