ASP.NET - Store Temporary Files

summerbulb picture summerbulb · Aug 22, 2011 · Viewed 11k times · Source

I have a web form that allows users to upload files while opening a ticket in our system. The upload is done using the "ajax control toolkit" asyncFileUpload control.

The idea is to have files saved to a temp directory and only save them to the permanent location when the user hits the "commit" button.

I would like to be able to get rid of temp files that are no longer relevant (e.g. the user leaves the page open for a month without posting the form).

What would be the best way to not keep temp files forever. Maybe keeping them files in the session? Maybe keeping them in the viewstate?

I could add some JS to the page with a timeout and add some code that runs when the user leaves the page. But these ideas are client side solutions. I wouldn't want someone to tamper with the code and leave me rubbish on my system.

Any other idea?

Thanks, Summerbulb

Answer

David picture David · Aug 22, 2011

Maybe keeping them files in the session?

No. This would unnecessarily use large amounts of server memory and users could adversely affect your overall server performance by uploading large files.

Maybe keeping them in the viewstate?

No. This would effectively mean that every post-back would involve uploading (and downloading) the file again for no reason. Application performance would slow significantly and provide a poor user experience (not to mention eat through your bandwidth, which may cost you money).


The files are being stored in a temporary location on the server, right? And the application tracks information about the files in a data store of some kind (I'm assuming a SQL database)? I'd recommend having a separate application to handle the cleanup, especially since you're talking on the scale of a month.

A Windows service or scheduled console application would do the job just fine. It can, at regular intervals, check the directory and the database and, based on whatever rules you give it, perform some clean-up. Maybe even use whatever messaging mechanism may exist in the ticketing system to notify the user of this action, notify an admin, etc.