【问题标题】:How to handle temporary files in an ASP.NET application如何处理 ASP.NET 应用程序中的临时文件
【发布时间】:2010-01-06 17:03:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# asp.net file-io


    【解决方案1】:

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

    唯一的缺点是,如果创建 PDF 的过程不经常使用,文件会堆积起来,但最终会被清理掉。在 2 年内关闭 4000 个 PDF,我们还没有以这种方式出错。

    【讨论】:

    • 这似乎是个好主意,在创建新文件时删除旧文件。唯一让我担心的是许可问题 - 我不确定我们是否可以为所有在他们的网络服务器上使用该产品的客户做到这一点..
    • 一般来说应该不是什么大问题。但是,如前所述,您始终可以使用 App_Data 或其中的文件夹。
    • 如果您让用户有机会允许上传到某个文件夹,出于安全考虑,我建议使用虚拟目录。请记住,如果文件可以通过 URL 从外部访问,您需要拒绝“脚本性能”(或者无论如何调用 IIS 中的属性)以获得更高的安全性。
    • 在我的情况下,这些不是用户上传的,而是服务器生成的图像,我必须能够为用户提供服务,而且由于 seadragon 的工作方式,我还必须保留他们的文件夹结构。在这里,安全性可能不是浪费空间那么大的问题..
    【解决方案2】:

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

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

    【讨论】:

    • 实际上我想在我的应用程序结构中使用一些图像文件夹,只是为了能够提供这些(虽然是临时的)文件。原因是 seadragon 生成了这个文件夹结构,客户端使用它来请求图像的正确部分。使用 App_Data 文件夹有什么好处(例如在权限或其他方面)?
    【解决方案3】:

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

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

    我会改为制定一个预定的流程,可能每小时运行一次,或者每天运行一次,这取决于您想要什么。并让它检查缓存中每个图像的年龄,如果它比您的任意“过期时间”更早,则将其删除。

    除此之外没有什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2013-04-14
      • 2011-06-14
      • 2010-11-18
      • 2014-05-07
      相关资源
      最近更新 更多