c# - 删除上传的文件,如果它没有移动到另一个文件夹

标签 c# asp.net file-upload ashx

我正在用 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。绑定(bind)事件时,我找不到将文件名作为参数传递的方法。很简单,这是有问题的。我正在寻找一种更优雅的方式来在一小时后删除上传的文件。

最佳答案

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

怎么样,在应用程序启动时启动的网络应用程序中的另一个线程上运行清理过程,每次 session 过期时都会删除临时文件。这样您就不需要计时器,因为每次 session 过期时都会提示该过程。您将需要一个类来存储对仍然存在的文件的引用(我猜是唯一的名称)(我的意思是它们所属的 session 仍然存在),clean 进程可以检查这些文件。

LMK,如果你想要一些代码指针。

关于c# - 删除上传的文件,如果它没有移动到另一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8587815/

相关文章:

asp.net-mvc - MVC:如何将文件上传和其他表单字段发布到一个操作

c# - 如何修复不允许子操作执行重定向操作,其他答案未修复

c# - 通用 LINQ 函数 - 选择 Func 作为参数的 SelectMany

javascript - 使用 Javascript 单击按钮切换下拉列表启用和禁用?

c# - IMvcBuilder AddJsonOptions 在.Net Core 3.0 中去了哪里?

jQuery 文件上传 - GAE 删除上传的 blob

c# - 我怎样才能让 WinForms 停止默默地忽略未处理的异常?

c# - JavaScriptSerializer 无法正确序列化 DynamicJsonObject

c# - 企业库问题

javascript - Angular - 如何在没有后端的情况下测试互联网上传速度?