如何处理ASP.NET应用程序中的临时文件

时间:2010-01-06 17:03:42

标签: c# asp.net file-io

最近,我正在努力在我们的Web应用程序中显示工作流图图像。我设法使用重新托管的WF设计器并在服务器上即时创建图像,但想象工作流程图可以很快变大,我想通过使用一些ajax控件来显示图像来提供更好的用户体验支持缩放&平底锅功能。

我偶然遇到了seadragon的网站,这似乎只是我可以使用的一项了不起的工作。只有一个缺点 - 为了使用它们的库生成深度缩放版本的图像,我必须使用服务器上的文件结构。由于我正在使用的图像的临时性质(带有进度指示器的工作流程图),重要的是不仅能够创建这样的图像,而且还能在一段时间之后摆脱它们。

现在的问题是如何才能最好地确保可以在服务器(ASP.NET Web应用程序)上创建临时图像文件和文件夹层次结构,并在以后进行清理。我正在考虑使用缓存功能并在缓存项目到期时删除相应的图像文件夹层次结构,或者只是在Global.asax的Application_Start和Application_End中删除整个临时文件夹的内容,但我不是很确定这是否是一个好主意,是否存在一些安全限制或与文件系统相关的问题。你觉得怎么样?

3 个答案:

答案 0 :(得分:2)

我们做类似的事情来创建PDF报告,并发现最简单的方法是使用时间戳检查来确定“旧”文件是如何,然后根据一段时间删除它们,在我们的情况下超过2小时。这是在创建下一个PDF文档之前完成的,但是作为创建过程的一部分。我们还创建了一个特定的文件夹,并为ASP.Net用户提供了对该文件夹的读/写访问权限。

唯一的缺点是,如果不经常使用创建PDF的过程,则会有文件的堆积,但最终会清理它们。在2年内接近4000 PDF,我们还没有这样做的错误。

答案 1 :(得分:1)

使用App_Data文件夹。此文件夹位于您的应用程序内,可由您的应用程序编写,而无需超出应用程序的上下文,但它也可以防止随意浏览。它的目的是为您的应用程序保存数据文件。

Application_Start和Application_End只会触发一次,所以如果你需要更好的清理,我会考虑使用缓存结构或简单的Windows服务来处理清理。

答案 2 :(得分:0)

首先,您必须确保您的IIS工作进程有权从缓存目录中写入/删除文件(而不是您网站的其余部分,以防万一)

第二,我会远离使用App_Start和App_End,App端清理文件并不是100%保证可以触发,你最终可能会遇到越来越多的孤立图像。

我会做一个预定的过程,可能每小时运行一次,或者每天运行一次,具体取决于你想要的。并检查缓存中每个图像的年龄,以及它是否比您任意的“expiure time”旧,然后将其删除。

除此之外没有多少。