2009-04-30 17 views
5

Si noti che non sto parlando dei "file ASP.NET temporanei" generati dal compilatore.Come gestire i file temporanei in ASP.NET?

La mia applicazione Web (ASP.NET MVC) utilizza Graphviz per generare immagini che vengono quindi inviate al client. Ciò richiede la creazione di file temporanei.

Qual è il modo migliore per gestire questi? C'è un modo per eliminarli immediatamente dopo che sono stati inviati? Dovrei usare un thread in background? Qualcosa in Application_Start o Application_End?

risposta

0

usiamo application_start con un tipo di timer di una cosa da eseguire a intervalli di 24 ore e pulire/eliminare la cartella dei file temporanei una volta al giorno.

3

Graphviz crea il client e li aggiunge come collegamento nella pagina. quindi non è possibile eliminarli direttamente.

ci sono diversi modi:

  • all'avvio dell'applicazione, nessuno dovrebbe usare una di queste immagini. quindi puoi cancellarlo
  • aggiungi un riferimento all'immagine (ad esempio il percorso) alla cache e aggiungi un CacheItemRemovedCallback, che cancellerà la tua immagine. (Limiti ben la quantità di immagini sul vostro HD
  • fanno un timer, che elimina gli elementi periodicamente

essere consapevoli, che non si deve cancellare le immagini, che vengono creati solo un secondo fa. A causa di essi può essere utilizzato.

1

mi piace gestire i file temporanei creati da un'azione nella stessa azione che li genera. Ad esempio: (in MVC, ma questo potrebbe applicarsi a qualsiasi quadro)

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

Se Foo() viene chiamato un sacco, è possibile aggiungere un po 'di logica per solo chiamata pulizia di tanto in tanto. Questo è un po 'come il lavoro cron di un povero uomo, ma funziona bene.

0

È possibile creare un gestore (.ashx) e lo streaming del file temporaneo attraverso quello. In questo modo saprai che il file è stato trasferito al client ed è possibile eliminare il file temporaneo alla fine del gestore.

Un possibile problema con questo è che il client non sarà in grado di scaricare il file due volte, poiché lo si elimina immediatamente. (Che potrebbe poi essere attenuati utilizzando la cache della pagina-uscita ...)

Anche se la cosa migliore sarebbe se si potesse evitare il problema temporaneo file in tutto, e lo streaming di estrarre il file su richiesta, generando nel gestore ...

2

Utilizzare method described by other user ma chiedere al browser di utilizzare la cache se desidera nuovamente l'immagine impostando l'intestazione Last-Modifed nella risposta quindi nel gestore immagini se si ottiene un valore Se modificato -Data l'intestazione, il gestore deve rispondere con StatusCode 304 "NON Modificato" in questo modo l'immagine viene ancora visualizzata fino a quando il browser del client non ha cancellato la cache.

Problemi correlati