Depend on my experience on developing file-Sharing systems checking file extensions is simple but not enough there was a bug in iis 6 that hackers could bypass this checks by adding a ";" to a part of filename and upload their shell-scripts as an image !
The best method is to save user uploaded files one folder upper the site root folder for example if your site folder is:
c:\hosting-space\myuser\mydomain.com\www-root\
your code have to save files to:
c:\hosting-space\myuser\mydomain.com\USERUPLOADs\
by this trick iis user can not have direct access to an uploaded virus or shell-script!
and use a .aspx file to read file stream indirectly.
<img src="/loadfiles.aspx?name=?????" />
the benefits are many for example you can write a stat-counter or check user session or avoid cross-site access to your user files how ever you will need some codding skills to add download resume support for hug files and should take care of script timeout and ...
and other solution that I didnt test by myself is to use web.congif to avoid run script permission from upload folder:
<location path="upload">
<system.webServer>
<handlers accessPolicy="Read" />
</system.webServer></location>