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

4
最近我在我们的Web应用程序中显示工作流程图像。我成功地使用了重新托管的WF设计师并在服务器上即时创建了图像,但想象一下工作流程图表可能会变得多么庞大,我想通过使用一些支持缩放和平移功能的ajax控件来提供更好的用户体验。
我偶然发现了seadragon网站,它似乎是一个非常棒的作品,我可以使用它。只有一个缺点-为了使用他们的库生成图像的深度缩放版本,我必须使用服务器上的文件结构。由于我使用的图像是临时性的(带有进度指示器的工作流程图),因此重要的不仅是能够创建这样的图像,还要在一段时间后将其清除。
现在的问题是如何最好地确保可以在服务器(ASP.NET Web应用程序)上创建临时图像文件和文件夹层次结构,并稍后清理它们。我考虑使用缓存功能,并在缓存项过期时删除相应的图像文件夹层次结构,或者简单地在Global.asax的Application_Start和Application_End中删除整个临时文件夹的内容,但我不确定这是否是一个好主意,以及是否存在一些安全限制或与文件系统相关的问题。你认为呢?
3个回答

3
我们在创建PDF报告时也采用了类似的方式,发现最简单的方法是使用时间戳检查来确定文件的“老化程度”,然后根据一段时间(我们的情况是两个小时以上)将它们删除。这是在创建下一个PDF文档之前完成的,但作为创建过程的一部分。我们还创建了一个特定的文件夹,并给了ASP.Net用户对该文件夹的读/写访问权限。
唯一的缺点是,如果不经常使用创建PDF的过程,就会产生大量文件,不过它们最终会被清理掉。在两年时间内,我们已经创建了近4000份PDF文件,并且使用这种方法从未出现错误。

这似乎是一个好主意,在创建新文件时清除旧文件。唯一让我担心的是权限问题-我不确定我们是否可以为所有在他们的Web服务器上使用该产品的客户执行此操作。 - Tomas Vana
通常这不应该是一个大问题。然而,正如已经提到的,您总是可以使用App_Data或其中的文件夹。 - BinaryMisfit
如果您让用户有机会将文件上传到特定文件夹中,我建议出于安全考虑使用虚拟目录。请记住,如果这些文件可以通过 URL 从外部访问,为了提高安全性,您需要拒绝“脚本执行”(或者在 IIS 中称之为其他属性)。 - citronas
在我的情况下,这些不会是用户上传的内容,而是服务器生成的图像,我必须能够向用户提供这些图像,并且还必须保留它们的文件夹结构,因为海龙工作的方式。安全性在这里可能并不是一个大问题,浪费空间可能更重要。 - Tomas Vana

1

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

Application_Start和Application_End每个仅会触发一次,因此如果您需要更好的清理处理,我建议考虑使用缓存结构或简单的Windows服务来处理清理。


实际上,我想在我的应用程序结构中使用一些图像文件夹,以便能够提供这些(虽然是临时的)文件。原因是Seadragon生成此文件夹结构,客户端使用它来请求图像的正确部分。使用App_Data文件夹是否有任何优势(例如权限或其他方面)? - Tomas Vana

0

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

其次,我建议避免使用App_Start和App_End,因为App_End清理文件不能保证100%触发,您可能会得到越来越多的孤立图像。

相反,我建议制定一个计划任务,每小时运行一次或每天运行一次,具体取决于您的需求。并检查缓存中每个图像的年龄,如果它比您的任意“过期时间”旧,则将其删除。

除此之外,没有什么需要注意的了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接