2 Stimmen

Erstellen öffentlicher temporärer Dateien mit Verfallsdatum

Ich baue eine kleine Webapp auf win2003 mit asp.net 2.0. Ich muss kleine Dateien erstellen, auf die ich über das Web zugreifen kann, und die Dateien sollen eine Verfallszeit von 10 Minuten haben. Ich habe keine Unterstützung dafür im Framework gefunden und meine andere Lösung, die mir in den Sinn kam, war, einen Zeitplanjob zu haben, der die Datei alle X Minuten bereinigt. Aber irgendwie glaube ich, dass ich nicht der erste bin, der dieses Problem hat, und ich frage mich, ob es andere intelligente Lösungen gibt.

Vielen Dank im Voraus.

2voto

tvanfosson Punkte 506878

Ohne mehr darüber zu wissen, warum Sie das tun, denke ich, dass Ihre Lösung mit einem externen Programm, das die Dateien bereinigt, die beste Lösung ist. Eine Alternative könnte sein, die "Dateien" in einer Datenbank zu speichern und einen Handler zu erstellen, der die Daten aus der Datenbank abruft, aber nur, wenn die "Datei" nicht abgelaufen ist. Sie könnten dann eine Bereinigungsaufgabe für die Datenbank viel seltener planen und trotzdem nur die "Dateien" bereitstellen, die noch nicht abgelaufen sind. Die Erstellung der Dateien auf der Festplatte würde Sie dazu zwingen, die Bereinigung regelmäßig durchzuführen, um sicherzustellen, dass abgelaufene Elemente nicht mehr verfügbar sind.

Ich nehme an, Sie könnten auch den Handler mit Festplattendateien verwenden und das Erstellungsdatum überprüfen, bevor Sie die Datei bereitstellen. In diesem Fall müsste sich der Ordner mit den eigentlichen Dateien außerhalb der Website oder in einem eingeschränkten Bereich befinden, der den direkten Zugriff durch normale Benutzer verhindert.

0voto

Lou Franco Punkte 85315

Da es sich um eine kleine Website handelt, und wenn Sie es einfach halten wollen, überprüfen Sie einfach alle N Anfragen an die Website. Wenn Sie glauben, dass die Anzahl der zu bereinigenden Dateien groß werden könnte, stoppen Sie die Bereinigung, nachdem Sie einige gefunden haben, und lassen Sie die nächste Anfrage ein paar mehr bereinigen. Der Vorteil ist, dass Sie sich nicht um einen externen Job kümmern müssen (und ihn installieren und am Laufen halten, usw.).

Wahrscheinlich keine gute Idee für einen großen Standort.

0voto

William Edmondson Punkte 3529

Soll der Dateizugriff für entfernte Benutzer kontrolliert werden?

Sie könnten einen Windows-Dienst oder eine geplante Konsolenanwendung erstellen, um abgelaufene Verzeichnisse/Dateien regelmäßig zu entfernen. Alternativ könnten Sie Ihre Webanwendung die Dateireaktion verwalten lassen, anstatt direkt auf die Dateien auf Ihrer Webseite zu verweisen. Sobald die Datei ein bestimmtes Alter überschritten hat, programmieren Sie Ihre Anwendung einfach so, dass sie die Datei nicht mehr zurückgibt.

Hier ist etwas Ähnliches wie das, was ich in der Vergangenheit gemacht habe

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();
            }
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X