2014-02-24 49 views
0

這種情況就像我有一個索引操作方法,它正在下載一個文件,下載完成後我需要從我的應用程序中刪除該文件。
要刪除文件,我已創建了包含在模型中的操作篩選器OnActionExecuted。現在問題是我不知道如何訪問此操作篩選器中的文件名?
這是操作方法:如何將Action Method中的值傳遞給Model中不包含的Action Filter?

[HttpPost] 
    [DeleteFile] 
    public virtual ActionResult Index(TranscriptViewModel model) 
    { 
     string exportedFileName = model.GetFileName(); 
     if (!string.IsNullOrWhiteSpace(exportedFileName)) 
     { 
      var fileStream = System.IO.File.OpenRead(Server.MapPath(@"App_Data\" + exportedFileName)); 
      return File(fileStream, "application/" + model.Format.ToLower(), model.FileName); 
     } 
     else 
     { 
      model.IsShowErrorMsg = true; 
      return View(model); 
     } 
    } 

exportedFileName是,我需要在下面的動作過濾器來訪問文件名:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] 
public class DeleteFileAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     string fileName = "I need file name here"; 
     if (System.IO.File.Exists(fileName)) 
     { 
      filterContext.HttpContext.Response.Flush(); 
      filterContext.HttpContext.Response.End(); 
      System.IO.File.Delete(fileName); 
     } 
    } 
} 

請建議我我如何才能實現這一要求的方式。謝謝。

+0

您可以顯示文件名是如何建造?我的意思是這個方法:model.GetFileName(); –

回答

0

您可以嘗試使用在你的控制器動作下面的代碼,這將實現你想要的結果:

string exportedFileName = model.GetFileName(); 
if (!string.IsNullOrWhiteSpace(exportedFileName)) 
{ 
context.Response.Clear(); 
context.Response.ContentType = "application/pdf";//change as needed 
context.Response.AddHeader("Content-Disposition", "attachment;filename=" + exportedFileName); 
context.Response.TransmitFile(context.Server.MapPath(System.IO.Path.Combine(setupDirectory, setupName))); 
// Add redirect here if you like 
context.HttpContext.Response.Flush(); 
context.HttpContext.Response.End(); 
System.IO.File.Delete(exportedFileName); 
} 
else 
{ 
model.IsShowErrorMsg = true; 
return View(model); 
} 
相關問題