Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET应用程序中处理临时文件_C#_Asp.net_File Io - Fatal编程技术网

C# 如何在ASP.NET应用程序中处理临时文件

C# 如何在ASP.NET应用程序中处理临时文件,c#,asp.net,file-io,C#,Asp.net,File Io,最近,我正在我们的web应用程序中显示工作流图图像。我设法使用重新注册的WF designer并在服务器上动态创建图像,但想象一下工作流图可以很快变大,我想通过使用一些ajax控件来显示支持缩放和平移功能的图像,从而提供更好的用户体验 我碰巧看到的网站,这似乎是一个惊人的工作,我可以使用。只有一个缺点-为了使用他们的库生成图像的深度缩放版本,我必须使用服务器上的文件结构。由于我使用的图像是临时性的(带有进度指示器的工作流图),因此,重要的是不仅要能够创建这样的图像,还要在一段时间后将其清除 现在

最近,我正在我们的web应用程序中显示工作流图图像。我设法使用重新注册的WF designer并在服务器上动态创建图像,但想象一下工作流图可以很快变大,我想通过使用一些ajax控件来显示支持缩放和平移功能的图像,从而提供更好的用户体验

我碰巧看到的网站,这似乎是一个惊人的工作,我可以使用。只有一个缺点-为了使用他们的库生成图像的深度缩放版本,我必须使用服务器上的文件结构。由于我使用的图像是临时性的(带有进度指示器的工作流图),因此,重要的是不仅要能够创建这样的图像,还要在一段时间后将其清除


现在的问题是,我如何才能最好地确保临时图像文件和文件夹层次结构可以在服务器(ASP.NET web app)上创建,然后进行清理。我正在考虑使用缓存功能,在缓存项过期时删除相应的图像文件夹层次结构,或者干脆在Global.asax的Application_Start和Application_End中删除整个临时文件夹的内容,但我不确定这是否是一个好主意,是否存在一些安全限制或与文件系统相关的问题。您认为如何?

首先,您必须确保您的IIS工作进程有权从缓存目录写入/删除文件(而不是站点的其余部分,以防万一)

第二,我不会使用App_Start和App_End,App_End清理文件并不是100%保证会触发,你可能会得到越来越多的孤立图像

相反,我会制定一个计划流程,可能每小时运行一次,或者每天运行一次,这取决于您想要什么。并让它检查缓存中的每个图像有多旧,如果它比您的任意“expiure time”旧,则将其删除


除此之外,没有太多内容。

使用App\u数据文件夹。此文件夹位于应用程序内部,应用程序无需超出应用程序的上下文即可写入,但也可以防止随意浏览。它用于保存应用程序的数据文件


应用程序:启动和应用程序,每次只会触发一次,所以如果您需要更好的清理,我会考虑使用缓存结构或简单的Windows服务来处理清理。

< P>我们做类似的事情来创建PDF报告,发现最简单的方法是使用时间戳检查来确定“旧”文件是如何的,然后根据一段时间删除它们,在我们的例子中,超过2小时。这是在创建下一个PDF文档之前完成的,但也是创建过程的一部分。我们还创建了一个特定的文件夹,并授予ASP.Net用户对该文件夹的读/写权限


唯一的缺点是,如果不定期使用创建PDF的过程,则会生成大量文件,但最终会清理这些文件。在2年内,在接近4000个PDF的时候,我们还没有发现这样做的错误。

实际上,我想在我的应用程序结构中使用一些图像文件夹,以便能够提供这些(尽管是临时的)文件。原因是seadragon生成了这个文件夹结构,客户端使用它来请求图像的正确部分。使用App_Data folder(例如,在权限或其他方面)有什么好处吗?这似乎是个好主意,在创建新文件时删除旧文件。唯一让我担心的是许可问题——我不确定我们是否能为所有在其web服务器上使用该产品的客户做到这一点。一般来说,这不应该是一个大问题。但是,如前所述,您可以始终使用App_数据或其中的文件夹。如果您给用户机会允许上传到某个文件夹,出于安全目的,我建议使用虚拟目录。请记住,如果文件可以通过URL从外部保存,则需要拒绝“脚本性能”(或者不管调用IIS中的属性如何)为了获得更多的安全性。在我的情况下,这些将不是用户上传,而是服务器生成的图像,我必须能够服务于用户,我还必须保留他们的文件夹结构,因为seadragon的工作方式。在这里,安全问题可能没有浪费空间那么大。。