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

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s