Visszaküldött fájl törlése MVC-ben

Nem ritka dolog ASP.NET MVC-ben, hogy egy szerver oldalon létrehozott fájlt egy FilePathResult segítségével küldünk vissza a kliensre, valahogy így:

public FileResult GetFile()
{
    // TODO: itt a lényeg...
    return this.File( filePath, type );
}

Ha az adott fájl történetesen egy ideiglenes állomány, akkor felmerülhet a kérdés, hogyan tudjuk a teljes fájl visszaküldése után törölni az immár szükségtelen fájlt a szerverről?

Például egy ún. result filterrel:

public class DeleteFileAttribute : ActionFilterAttribute
{
  public override void OnResultExecuted( ResultExecutedContext filterContext )
  {
    filterContext.HttpContext.Response.Flush();
    string filePath = ( filterContext.Result as FilePathResult ).FileName;
    File.Delete( filePath );
  }
}

Ez persze egyszerűsített kód, érdemes kiegészíteni azzal, hogy az action eredménye valóban FilePathResult-e, hogy létezik-e a fájl, végül pedig gondoskodni arról, hogy ne szálljon el a kód akkor sem, ha a törlés nem sikerül.

Ha így elkészült a filterünk, ragasszuk oda a [DeleteFile] attribútumot az action elé és már menni is fog a törlés.

 

Technorati-címkék: ,
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s