2009-04-30 5 views
5

Beachten Sie, dass ich nicht über die vom Compiler generierten "temporären ASP.NET-Dateien" spreche.Wie behandelt man temporäre Dateien in ASP.NET?

Meine Webanwendung (ASP.NET MVC) verwendet Graphviz zum Generieren von Bildern, die dann an den Client übergeben werden. Dies erfordert die Erstellung von temporären Dateien.

Was ist der beste Weg, um mit diesen umzugehen? Gibt es eine Möglichkeit, sie sofort nach dem Senden zu löschen? Sollte ich einen Hintergrund-Thread verwenden? Etwas in Application_Start oder Application_End?

Antwort

0

wir verwenden application_start mit einem Timer, der in einem Intervall von 24 Stunden läuft und den Ordner für temporäre Dateien einmal täglich löscht/löscht.

3

Graphviz erstellt den Client und fügt sie als Verknüpfung auf der Seite hinzu. , damit Sie sie nicht direkt löschen können.

gibt es mehrere Möglichkeiten:

  • beim Start der Anwendung, niemand eines dieser Bilder verwendet werden soll. So können Sie es löschen
  • Sie fügen einen Verweis auf das Bild (z. B. den Pfad) in den Cache und fügen Sie eine CacheItemRemovedCallback, die Ihr Bild löschen wird. (Grenzen schön die Menge der Bilder auf Ihrem HD
  • einen Timer machen, dass die Elemente in regelmäßigen Abständen löscht

darüber im Klaren sein, dass Sie sollten nicht die Bilder löschen, die vor erstellt werden, eine zweite gerade. Aufgrund sie verwendet werden.

1

Ich mag an sich mit temporären Dateien befassen, die durch eine Aktion in derselben Aktion erstellt werden, die sie erzeugt MVC, aber dies auf jeden Rahmen gelten könnte)

public ActionResult Foo() 
{ 
    FooCleanup(); // deletes files in "~/temp/Foo/" older than a day or so 

    string filename = CreateTemporaryFile(); // Creates a temporary file like "~/temp/Foo/{timestamp}.foo" 
    return File(filename); 
} 

Wenn Foo() viel aufgerufen wird, können Sie jeder so oft eine gewisse Logik nur Anruf Bereinigung hinzufügen können. Das ist wie ein Cron-Job eines armen Mannes, aber es funktioniert gut.

0

Sie könnten einen Handler (.ashx) erstellen und die temporäre Datei durch diese streamen. Auf diese Weise wissen Sie, dass die Datei an den Client übertragen wurde, und Sie können die temporäre Datei am Ende des Handlers löschen.

Ein mögliches Problem dabei ist, dass der Client die Datei nicht zweimal herunterladen kann, da Sie sie sofort löschen. (Was dann mit dem Seitenausgabe-Cache gemildert werden könnte ...)

Die beste Sache wäre, wenn Sie das Temp-Dateiproblem über vermeiden und die Datei auf Anfrage streamen könnten, indem Sie generieren es in der Handler ...

2

Verwenden Sie method described by other user Verwenden SieIf-Modified, aber bitten Sie den Browser, seinen Cache zu verwenden, wenn das Bild erneut durch Festlegen der Last-Modifed-Header in der Antwort dann im Bild-Handler gewünscht wird -Seit dem Header sollte der Handler mit dem Statuscode 304 "NOT Modified" antworten, so dass das Bild immer noch angezeigt wird, solange der Client-Browser seinen Cache nicht gelöscht hat.

Verwandte Themen