【问题标题】:Deleting temp files from server on session end在会话结束时从服务器中删除临时文件
【发布时间】:2012-08-15 13:45:28
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

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

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

    【讨论】:

    • 查询字符串参数是最简单的...基本上,只需为文件命名,并在更新时覆盖它。然后,当您设置图像的来源时(如果需要,可以在后面的代码中),将查询字符串附加到图像名称。它可以是任何随机值...其目的是诱使网络浏览器再次下载图像,从而确保您永远不会看到图像的旧缓存版本。
    • 这就像 4 个答案在一个... 1) 我试图避免让另一个程序或任务清理旧文件。 2,3,4)我必须阅读如何使用这些建议,因为我还是 Web 开发的新手。如果这有所不同,我正在通过 VS2010 中的代码完成所有工作。这可能不是正确的做事方式,但我更像是一个 Windows .NET 程序员而不是 ASP/Web 开发人员。
    • 查询字符串起到了作用。现在,每个用户 (forums.asp.net/t/1561843.aspx/1 找到了一个完美的问题,除了他将修改后的图像保存到处理程序的响应输出流之外,OP 所做的几乎与我正在做的完全一样。如果我能做到这一点,那么我一开始就不需要保存这些愚蠢的图像。现在我只需要弄清楚如何使用处理程序....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 2016-06-02
    • 2020-06-03
    相关资源
    最近更新 更多