其他分享
首页 > 其他分享> > 删除上传的文件,如果它不移动到另一个文件夹

删除上传的文件,如果它不移动到另一个文件夹

作者:互联网

我正在用asp.net开发一个评论系统.用户可以使用“附加”按钮附加图像,并使用“发布”按钮发布评论.当用户附加图像时,开始上传图像. ASHX处理程序将上载的文件保存到“ temp”文件夹中.如果用户单击“发布”按钮,我会将图像移到安全的地方.如果他没有单击“发布”,则关闭浏览器并消失,该文件将保留在“临时”文件夹中.上载一个小时后,如何从此“ temp”文件夹中删除文件?

细节:
我认为在用于上传的ashx文件中使用System.Timers.Timer

System.Timers.Timer timer = new System.Timers.Timer(300);
string fileName;

public void Cleaner()
{
    System.Timers.Timer timer = new System.Timers.Timer(300); //3 second
    timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
    timer.Start();
}

protected void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs a)
{
    timer.Stop();
    timer.Close();

    string path = "temp";
    string mapPath = HttpContext.Current.Server.MapPath("../" + path);
    FileInfo TheFile = new FileInfo(mapPath + "\\" + fileName);
    if (TheFile.Exists) File.Delete(mapPath + "\\" + fileName);
}

public void ProcessRequest(HttpContext context)
{
    //Saving uploaded file
    Cleaner();
}

但我觉得我做得不好.

计时器在3秒后滴答,但是timer_Elapsed()函数中的HttpContext.Current返回null.此外,计时器滴答后,文件名也返回null.绑定事件时,我找不到将文件名作为参数传递的方法.简单来说,这是有问题的.我正在寻找一种更优雅的方式来删除一小时后上传的文件.

解决方法:

我会避免使用计时器,因为您将为每个文件创建一个计时器,这根本无法很好地扩展.

怎么样,在应用程序启动时启动的Web应用程序中的另一个线程上运行清理过程,每次会话到期时,该线程都会删除临时文件.这样,您无需计时器,因为每次会话到期时都会提示该过程.您将需要一个类来存储对该文件的引用(我想用唯一名称),该文件仍处于活动状态(这意味着它们所属的会话仍处于活动状态),清理过程可以检查该引用.

LMK如果您需要一些代码指针.

标签:ashx,file-upload,asp-net,c
来源: https://codeday.me/bug/20191202/2084685.html