Я разрабатываю систему комментариев с asp.net. Пользователь может прикрепить изображение с помощью кнопки «Прикрепить» и опубликовать комментарий с помощью кнопки «Опубликовать». Загрузка изображения начинается, когда пользователь прикрепляет его. Обработчик ASHX сохраняет загруженный файл в папку «temp». Если пользователь нажимает кнопку «Опубликовать», я перемещаю изображение в безопасное место. Если он не нажимает «Опубликовать», закрывает браузер и уходит, файл остается в папке «temp». Как я могу удалить файл из этой «временной» папки через час после его загрузки?
Подробности. Я думал об использовании System.Timers.Timer в файле ashx, используемом для загрузки
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 секунды, но HttpContext.Current в функции timer_Elapsed() возвращает значение null. Кроме того, имя файла также возвращает null после срабатывания таймера. Я не смог найти способ передать имя файла в качестве параметра при привязке события. Просто, это проблематично. Я ищу более элегантный способ удалить загруженный файл через час.