I'd definitely recommend storing a copy on the server to keep everyone honest.
Allow them to upload new versions for history tracking, and they'll love you.
Are the path to the file and its name valuable information beyond allowing you to grab a copy of it? Or is it sufficient to just get the contents? As a compromise you could have an edit box for "title" so they're not constrained to valid file name formats. Again, it all depends on your needs.
There are pre-built tools to handle the uploaded content, for example Jakarta's FileUpload (probably part of Commons Net, I'd guess). I coded my own way back when but haven't needed to handle uploaded files since. I do know it's not so simple. You get a stream and don't get told the size of the file up-front. The early tools simply wrote the data to a temporary file and returned it to your application. You can double-check, but when you get the file's contents, you don't get its name.
Then again, maybe the latest versions of
Struts abstract this all out of sight for you. Wouldn't that be nice?
Be sure to share your pain with us when you hit that part.