ASP.NET - Speichern von Temporären Dateien
Ich habe ein web-Formular, das ermöglicht Benutzern das hochladen von Dateien beim öffnen ein ticket in unserem system.
Der upload erfolgt über die "ajax control toolkit" asyncFileUpload Kontrolle.
Die Idee ist, Dateien gespeichert, um ein temp-Verzeichnis und nur speichern Sie Sie auf dem festen Standort, wenn der Nutzer auf die Schaltfläche "commit".
Ich würde gerne in der Lage sein, um loszuwerden, temporäre Dateien, die nicht mehr relevant sind (z.B. der Benutzer verlässt die Seite öffnen, für einen Monat ohne posting-form).
Was wäre der beste Weg, um nicht zu halten temp-Dateien für immer.
Vielleicht halten Sie die Dateien in der session?
Vielleicht halten Sie in der viewstate?
Könnte ich fügen Sie einige JS zu der Seite, die mit einem timeout, und fügen Sie einige code, der ausgeführt wird, wenn der Benutzer die Seite verlassen. Aber diese Ideen sind client-side-Lösungen. Ich würde nicht wollen, dass jemand unbefugt den code und lassen Sie mich Müll auf meinem system.
Andere Idee?
Dank,
Summerbulb
Die Dateien werden nur benötigt, wenn der Benutzer entscheidet, zum senden des Formulars. Andernfalls sollten Sie gelöscht werden.
InformationsquelleAutor summerbulb | 2011-08-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Vorschlag ist, fügen Sie ein On_SessionEnd handler in der Globalen.asax und löschen der temp-Dateien, wenn der Benutzer die Sitzung beendet. Sie können den Namen der temp-Dateien Anhängen der SessionID (oder voranstellen, die SessionID, was Sie wollen) und auf diese Weise würde man nur die Dateien löschen, die für die Benutzer, deren Sitzung beendet ist. Man könnte auch hinzufügen, ein On_Application_End handler Global.asax löschen Sie ALLE Dateien im temp-Verzeichnis.
InformationsquelleAutor Icarus
Nicht. Dies würde unnötig große Mengen an server-Speicher und der Benutzer könnte sich negativ auf Ihre Allgemeine server-performance durch das hochladen von großen Dateien.
Nicht. Dies würde effektiv bedeuten, dass jeder post-back würde bedeuten, hochladen (und Download) die Datei wieder ohne Grund. Anwendung würde die Leistung deutlich verlangsamen und eine schlechte user experience (nicht zu erwähnen, Essen durch Ihre Bandbreite, das kann Sie Geld Kosten).
Die Dateien werden gespeichert in einem temporären Speicherort auf dem server, richtig? Und verfolgt die Anwendung die Informationen über die Dateien in einem datenspeicher, der eine Art (ich nehme an eine SQL-Datenbank)? Ich würde empfehlen, dass Sie eine separate Anwendung zu behandeln, die Aufräumarbeiten, vor allem da Sie sprechen auf der Skala von einem Monat.
Einen Windows-Dienst oder geplant Konsolenanwendung würde den job zu erledigen just fine. Es kann in regelmäßigen Abständen, überprüfen Sie das Verzeichnis und die Datenbank-und basierend auf was auch immer Regeln, die es Ihnen, einige clean-up. Vielleicht sogar verwenden, was messaging-Mechanismus kann es in den ticketing-system, um den Benutzer Benachrichtigen, der diese Aktion, informieren, admin, etc.
+1. service ist der richtige Weg zu gehen. Eine alternative wäre zu prüfen, auf der sessionStart Fall für Dateien, die zu alt sind, aber die Zeit, die der server benötigt, um Dateien zu löschen ist es die Zeit der Benutzer hat, um zu warten auf seinen ersten Besuch. Ich würde empfehlen, mit einem service für das
In der Tat, ich würde auf jeden Fall bleiben Weg von jeder Website, Veranstaltungen, für so etwas wie dieses. Es ist eine Zeit-basierte Bedienung im Gegensatz zu einem request/response-operation (das ist das, was eine web-Anwendung ist für). Ich mag auch Bill-Vorschlag, SSIS, ich bin einfach viel weniger vertraut mit der Pflege dieser. (Ich würde argumentieren, dass "eine ganze app zu verfolgen" ist auch trivial, aber das ist weder hier noch dort. Die insgesamt zeigen, dass eine geplante Aufgabe auf dem server bleibt.)
Während die Idee eines windows-Dienstes, gefällt mir, wie wir solche Dienste nutzen täglich, in diesem Fall funktioniert es nicht. Die Lösung muss eine sein, die innerhalb der Website gültig ist. Icarus Idee mit On_SessionEnd klingen gut und ich werde das prüfen.
InformationsquelleAutor David
Könnte man speichert die Dateien in dem Ordner temp des Benutzers. Ob das eine gute Methode in Ihrem speziellen Szenario kann ich nicht sicher sagen:
Den Pfad hängt von der aktuellen (Windows -) Benutzer, obwohl.
http://msdn.microsoft.com/en-us/library/system.io.path.gettemppath.aspx
InformationsquelleAutor Rune
Auf die commit-Sie können die Ausgabe eines Systems.IO.Datei.Move () - Befehl. Die restlichen Dateien entfernt werden können, mit einem service-oder console-app haben Sie Zugriff auf den server, um dies zu tun.
InformationsquelleAutor Brownman98