2009-04-30 36 views
5

Tenga en cuenta que no estoy hablando de los "archivos temporales ASP.NET" generados por el compilador.¿Cómo lidiar con archivos temporales en ASP.NET?

Mi aplicación web (ASP.NET MVC) usa Graphviz para generar imágenes que luego se envían al cliente. Esto requiere la creación de archivos temporales.

¿Cuál es la mejor manera de lidiar con esto? ¿Hay alguna manera de eliminarlos inmediatamente después de enviarlos? ¿Debo usar un hilo de fondo? Algo en Application_Start o Application_End?

Respuesta

0

usamos application_start con un tipo de temporizador para ejecutar en un intervalo de cada 24 horas y limpiar/eliminar la carpeta de archivos temporales una vez al día.

3

Graphviz crea el cliente y lo agrega como un enlace en la página. por lo que no puede eliminarlos directamente.

hay varias maneras:

  • al iniciar la aplicación, nadie debe usar una de estas imágenes. para que pueda eliminarlo
  • , agregue una referencia a la imagen (por ejemplo, la ruta) a la caché y agregue un CacheItemRemovedCallback, que eliminará su imagen. (Límites muy bien la cantidad de imágenes en su disco duro
  • hacen un temporizador, que elimina los artículos periódicamente

tenga en cuenta, que no se debe borrar las imágenes, que son creados hace un segundo., Debido a que puede ser utilizado.

1

me gusta tratar con archivos temporales creados por una acción en la misma acción que los genera. Por ejemplo: (en MVC, pero esto podría aplicarse a cualquier marco)

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

Si Foo() es llamado un montón, se puede añadir un poco de lógica para la limpieza única llamada de vez en cuando. Esto es algo así como el trabajo de cron de un hombre pobre, pero funciona bien.

0

Puede crear un controlador (.ashx) y transmitir el archivo temporal a través de eso. De esta forma sabrá que el archivo ha sido transferido al cliente, y puede eliminar el archivo temporal al final del controlador.

Un posible problema con esto es que el cliente no podrá descargar el archivo dos veces, ya que lo está eliminando de inmediato. (Que luego podría ser mitigado utilizando el caché de salida de página ...)

Aunque lo mejor sería si pudieras evitar el problema del archivo temp en, y transmitir el archivo a petición generando en el controlador ...

2

Utilice method described by other user pero solicite al navegador que use su caché si desea la imagen nuevamente configurando el encabezado Last-Modifed en la respuesta y luego en el controlador de imagen si obtiene un If-Modified - Desde el encabezado, el controlador debe responder con el código de estado 304 "NO modificado" de esa manera la imagen se sigue mostrando siempre que el navegador del cliente no haya borrado su caché.

Cuestiones relacionadas