在会话结束时从服务器删除临时文件

时间:2012-08-15 13:45:29

标签: asp.net vb.net global-asax

在我的应用中,我根据用户选择的选项修改图像。每次我修改默认图像时,我保存并将其命名为用户的ID& date.now.tostring("yyyyMMddHHmmssf")解决浏览器缓存问题。这很好,但现在我可能最终会留下很多旧图像。

现在如何从服务器上的~/Images/Temp/userID文件夹中删除所有图像?我在考虑使用Session_End中的Application_endGlobal.asax个潜艇,但我认为我无法访问任何变量来获取临时图像的路径。

如何在会话结束后删除这些临时文件?

1 个答案:

答案 0 :(得分:0)

会话结束仅针对进程内会话触发,并且无法保证(例如,服务器可能会断电并且不会触发)。应用程序结束不应该经常触发(正如您所指出的)您可能没有执行清理所需的数据。

会话结束时执行清理工作并不是错误,但对于这个特定问题,可能会有更好,更确定的解决方案。

如果唯一命名是问题的根源,我会想到几个选项:

  • 使用命名约定,该约定允许您定期运行Windows任务以识别旧图像并进行清理。对于像这样的任务,Powershell非常灵活。

  • 在名称末尾使用变化的查询字符串参数提供图像以避免缓存(但保持文件名一致)。

    示例:<img src="images/tim-medora.jpg?v=123" alt="picture" />

  • 通过处理程序动态提供图像。这使您可以控制缓存设置,更改查询字符串等。

  • 为图像提供自定义扩展,并在IIS中为该扩展设置不同的缓存设置。只要有效的图片,网页浏览器就可以使用指向自定义扩展程序的图片代码。

相关问题