创建具有到期时间的公共临时文件

时间:2009-06-26 13:46:13

标签: c# asp.net temporary-files

我正在使用asp.net 2.0在win2003上构建一个小型webapp。 我需要创建一些小文件,我认为这些文件可供网络访问,文件假设有10分钟的到期时间。 我没有在框架中找到任何支持,我想到的另一个解决方案就是有一个计划工作,可以在X分钟内清理文件。但不知何故,我认为我不是第一个遇到这个问题并且想知道是否还有其他智能解决方案的人。

提前致谢。

3 个答案:

答案 0 :(得分:2)

我不知道你为什么这么做,我认为你的外部程序解决方案清理文件是最好的解决方案。另一种方法是将“文件”存储在数据库中,并创建一个从数据库中检索数据的处理程序,但前提是“文件”未过期。然后,您可以更频繁地在数据库上安排清理任务,并且仍然只提供未过期的“文件”。在磁盘上创建它们会强制您定期进行清理,以确保过期的项目不再可用。

我想您也可以使用磁盘文件执行处理程序,并在提供文件之前检查创建日期。在这种情况下,包含实际文件的文件夹需要位于网站之外或禁止从普通用户直接访问的限制区域内。

答案 1 :(得分:0)

因为它很小,如果你想保持简单,只需检查每个N网站请求。如果您认为要清理的文件数量可能会变大,请在找到一些要清理的文件后停止清理并让下一个请求清理一些。优点是您不必管理外部作业(并安装它并使其保持运行等)。

大型网站可能不是一个好主意。

答案 2 :(得分:0)

目的是控制对远程用户的文件访问吗?

您可以创建Windows服务或计划的控制台应用程序,以定期删除过期的目录/文件。或者,您可以让您的Web应用程序管理文件响应,而不是直接链接到您网页上的文件。一旦文件超过某个年龄,只需将您的应用编码为不返回文件。

这与我过去的做法类似

protected void Button1_Click(object sender, EventArgs e)
        {
            string fileName = @"c:\SecureDirectory\DownloadableFile.txt";
            int exipireMinutes = -10;

            if (System.IO.File.Exists(fileName) && System.IO.File.GetCreationTime(fileName) >= DateTime.Now.AddMinutes(exipireMinutes))
            {
                byte[] fileBinary;
                using (System.IO.FileStream fs = System.IO.File.Open(Server.MapPath(fileName), System.IO.FileMode.Open))
                {
                    fileBinary = new byte[fs.Length];
                    fs.Read(fileBinary, 0, Convert.ToInt32(fs.Length));
                }
                Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);
                Response.ContentType = "application/octet-stream";
                Response.BinaryWrite(fileBinary);
                Response.End();
            }
        }