在我的应用中,我根据用户选择的选项修改图像。每次我修改默认图像时,我保存并将其命名为用户的ID& date.now.tostring("yyyyMMddHHmmssf")
解决浏览器缓存问题。这很好,但现在我可能最终会留下很多旧图像。
现在如何从服务器上的~/Images/Temp/userID
文件夹中删除所有图像?我在考虑使用Session_End
中的Application_end
或Global.asax
个潜艇,但我认为我无法访问任何变量来获取临时图像的路径。
如何在会话结束后删除这些临时文件?
答案 0 :(得分:0)
会话结束仅针对进程内会话触发,并且无法保证(例如,服务器可能会断电并且不会触发)。应用程序结束不应该经常触发(正如您所指出的)您可能没有执行清理所需的数据。
会话结束时执行清理工作并不是错误,但对于这个特定问题,可能会有更好,更确定的解决方案。
如果唯一命名是问题的根源,我会想到几个选项:
使用命名约定,该约定允许您定期运行Windows任务以识别旧图像并进行清理。对于像这样的任务,Powershell非常灵活。
在名称末尾使用变化的查询字符串参数提供图像以避免缓存(但保持文件名一致)。
示例:<img src="images/tim-medora.jpg?v=123" alt="picture" />
通过处理程序动态提供图像。这使您可以控制缓存设置,更改查询字符串等。
为图像提供自定义扩展,并在IIS中为该扩展设置不同的缓存设置。只要有效的图片,网页浏览器就可以使用指向自定义扩展程序的图片代码。