Ich entwickle ein Kommentarsystem mit asp.net. Ein Benutzer kann ein Bild mit der Schaltfläche "Attach" anhängen und den Kommentar mit der Schaltfläche "Post" veröffentlichen. Das Hochladen des Bildes beginnt, wenn der Benutzer es anhängt. Ein ASHX-Handler speichert die hochgeladene Datei im Ordner "temp". Wenn der Benutzer auf die Schaltfläche "Posten" klickt, verschiebe ich das Bild an einen sicheren Ort. Wenn er nicht auf "Posten" klickt, den Browser schließt und weggeht, bleibt die Datei im "temp"-Ordner. Wie kann ich eine Datei eine Stunde nach dem Hochladen aus diesem "temp"-Ordner löschen?
Einzelheiten: Ich dachte, die Verwendung von System.Timers.Timer in der für das Hochladen verwendeten ashx-Datei
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();
}
aber ich habe das Gefühl, dass ich nicht das Richtige tue.
Der Timer tickt nach 3 Sekunden, aber HttpContext.Current in der Funktion timer_Elapsed() gibt null zurück. Außerdem gibt der Dateiname nach Ablauf des Timers ebenfalls null zurück. Ich konnte keine Möglichkeit finden, den Dateinamen als Parameter beim Binden eines Ereignisses zu übergeben. Das ist einfach problematisch. Ich suche nach einer eleganteren Möglichkeit, die hochgeladene Datei nach einer Stunde zu löschen.