1

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

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

如何在会话结束或类似内容后删除这些临时文件?

4

1 回答 1

0

Session End 只对进程中的会话触发,并且不能保证(例如,服务器可能会断电并且不会触发)。Application End 不应该经常触发,并且(正如您所指出的)您可能没有执行清理所需的数据。

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

如果唯一命名是问题的根源,那么可以想到几个选项:

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

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

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

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

  • 为图像提供自定义扩展名并在 IIS 中为该扩展名设置不同的缓存设置。Web 浏览器对指向自定义扩展的图像标签没有问题,只要它是有效的图像。

于 2012-08-15T13:51:17.990 回答