[英]How to deal with temporary files in ASP.NET?
请注意,我不是在谈论编译器生成的“临时ASP.NET文件”。
我的Web应用程序(ASP.NET MVC)使用Graphviz生成图像,然后将其提供给客户端。 这需要创建临时文件。
处理这些问题的最佳方法是什么? 有没有办法在发送后立即删除它们? 我应该使用后台线程吗? Application_Start或Application_End中的东西?
Graphviz创建客户端,并将它们添加为页面中的链接。 所以你不能直接删除它们。
有几种方法:
请注意,您不应该删除仅在一秒钟之前创建的图像。 由于它们可以使用。
你不能通过控制器或使用ASHX( http://www.marklio.com/marklio/CommentView,guid,df8d6471-83fd-4f66-a799-ef8274979f0e.aspx )流出内容并删除完成写出流后的临时文件?
使用其他用户描述的方法但是如果想要图像再次通过在响应中设置Last-Modifed标头然后在图像处理程序中获得If-Modified-Since标头,则要求浏览器使用其缓存,处理程序应该回复使用StatusCode 304“NOT Modified”,只要客户端浏览器尚未清除其缓存,图像仍会显示。
我喜欢在生成它们的同一个动作中处理由动作创建的临时文件。 例如:(在MVC中,但这适用于任何框架)
public ActionResult Foo()
{
FooCleanup(); // deletes files in "~/temp/Foo/" older than a day or so
string filename = CreateTemporaryFile(); // Creates a temporary file like "~/temp/Foo/{timestamp}.foo"
return File(filename);
}
如果Foo()被大量调用,你可以添加一些逻辑,只是经常调用cleanup。 这有点像穷人的cron工作,但效果很好。
您可以创建一个处理程序(.ashx)并通过它传输临时文件。 这样您就会知道该文件已经转移到客户端,您可以删除处理程序末尾的临时文件。
可能的问题是客户端将无法下载文件两次,因为您要立即删除它。 (然后可以使用页面输出缓存来缓解...)
虽然最好的办法就是如果你可以完全避免临时文件问题 ,并根据请求流出文件,通过在处理程序中生成它...
我们使用带有计时器类型的application_start以每24小时的间隔运行,并每天清理/删除临时文件文件夹一次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.