You can do file upload in
servlets. As a matter of fact,
Struts provides support for file uploading and it's very easy to use.
As for shared storage device, my company's web server cluster (running Gentoo linux) is using one: all the user uploaded images are stored in that shared directory and if one web server goes down, the other server kicks in and takes over the shared folder. But unfortunately, I didn't set it up, so can't provide you with any more info.