【问题标题】:ASP.NET - Store Temporary FilesASP.NET - 存储临时文件
【发布时间】:2011-08-23 01:33:51
【问题描述】:

我有一个网络表单,允许用户在我们的系统中打开工单时上传文件。 上传是使用“ajax 控件工具包”asyncFileUpload 控件完成的。

我们的想法是将文件保存到临时目录,并且仅在用户点击“提交”按钮时将它们保存到永久位置。

我希望能够删除不再相关的临时文件(例如,用户将页面打开一个月而不发布表单)。

不永远保留临时文件的最佳方法是什么。 也许将它们保存在会话中? 也许将它们保持在视图状态中?

我可以在页面中添加一些带有超时的 JS,并添加一些在用户离开页面时运行的代码。但这些想法是客户端解决方案。我不希望有人篡改代码并在我的系统上留下垃圾。

还有什么想法吗?

谢谢, 夏日灯泡

【问题讨论】:

  • 这里的临时是什么意思?它是服务器上的临时位置还是您完全不想下载文件?
  • @Ankit:仅当用户决定发布表单时才需要这些文件。否则,它们应该被清除。

标签: c# asp.net ajaxcontroltoolkit


【解决方案1】:

也许将它们保存在会话中?

没有。这会不必要地使用大量服务器内存,并且用户上传大文件可能会对您的整体服务器性能产生不利影响。

也许将它们保持在视图状态中?

没有。这实际上意味着每次回发都会无缘无故地再次上传(下载)文件。应用程序性能会显着降低并提供糟糕的用户体验(更不用说消耗您的带宽,这可能会花费您的钱)。


文件存储在服务器上的临时位置,对吗?应用程序会跟踪某种数据存储中的文件信息(我假设是一个 SQL 数据库)?我建议使用单独的应用程序来处理清理工作,尤其是因为您所说的是一个月的规模。

Windows 服务或计划的控制台应用程序可以很好地完成这项工作。它可以定期检查目录和数据库,并根据您给它的任何规则执行一些清理工作。甚至可能使用票务系统中可能存在的任何消息传递机制来通知用户此操作、通知管理员等。

【讨论】:

  • 如果您确实有一个 SQL Server,请考虑一个每晚运行的 SSIS 包。你几乎可以用它做任何事情,而且安排起来很简单。比有另一个完整的应用程序要跟踪。
  • +1。服务是正确的方法。另一种方法是检查 sessionStart 事件是否有太旧的文件,但是服务器需要删除文件的时间,用户必须等待他的第一次访问。我建议为此使用服务
  • @citronas:确实,我肯定会因为这样的事情远离任何现场活动。这是一个基于时间的操作,而不是请求/响应操作(这是 Web 应用程序的用途)。我也喜欢 Bill 对 SSIS 的建议,只是我对维护这些内容不太熟悉。 (我认为“要跟踪另一个完整的应用程序”也是微不足道的,但这既不存在也不存在。在服务器上安排作业的总体意义仍然存在。)
  • 虽然 Windows 服务的想法吸引了我,因为我们每天都使用此类服务​​,但在这种情况下它不会起作用。解决方案必须是在站点范围内的解决方案。 Icarus 使用 On_SessionEnd 的想法听起来不错,我会研究一下。
【解决方案2】:

我的建议是在 Global.asax 中添加一个 On_SessionEnd 处理程序,并在用户会话结束时删除临时文件。您可以命名临时文件,将 SessionID 附加到它们(或添加 SessionID,无论您想要什么),这样您只会删除会话已结束的用户的文件。您还可以将 On_Application_End 处理程序添加到 Global.asax 以删除临时目录中的所有文件。

【讨论】:

    【解决方案3】:

    您可以将文件存储在用户的临时文件夹中。在您的特定情况下,这是否是一种好方法我不能肯定地说:

    var dir = System.IO.Path.GetTempPath();
    

    不过,路径将取决于当前 (Windows) 用户。

    http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx

    【讨论】:

    • 这怎么可能?您的意思是保存在服务器的 TEMP 文件夹中?然后再一次,必须在清理临时文件夹或类似的东西之前重新启动服务器。
    【解决方案4】:

    在提交时,您可以发出 System.IO.File.Move() 命令。如果您有权访问服务器,则可以使用服务或控制台应用程序删除剩余的文件。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 1970-01-01
      • 2012-09-16
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多