2015-09-16 75 views
1

我正在編寫一個應用程序,用戶將生成用戶可以查看的文件,然後選擇下載,如果它看起來不錯。該應用程序將文件寫入服務器以下列方式:如何在結束MVC應用程序時刪除文件?

private void WriteTestFileToServer(MyFile file) 
    { 
     string serverPath = "~/MyFiles"; 
     string fileName = "/FileExport" + "_" + file.FromDate.ToString("yyyyMMdd") + "_" + 
      file.ToDate.ToString("yyyyMMdd") + "_" + file.RunTime.ToString("yyyyMMdd") + ".txt"; 
     StreamWriter sw = new StreamWriter(Server.MapPath(serverPath + fileName), true); 
     foreach (var row in file.Rows) 
     { 
      sw.WriteLine(row.ToFileFormat()); 
     } 
     sw.Close(); 
    } 

會話結束後,即在用戶退出我想產生要刪除的所有文件瀏覽器。是否有任何處理我可以附加做一些清理工作?還是有更好的方法來存儲會話期間的文件,以便文件不必寫入磁盤?

請注意,我希望能夠將該文件作爲應用程序中的Href鏈接進行訪問。

+0

您可以處理'保護無效Session.End(object sender,EventArgs e)'在'global.aspx'文件中,但是隻有當你將某些東西保存到'Session'中時纔會觸發該事件 –

回答

1

當會話過期時,您沒有太多的控制權。

一種解決方案是將文件內容保存在用戶會話中,並將其顯示在控制器操作上。 .net將負責爲您清理會話。

public ActionResult GetFile() 
{ 
    // file content from session 
    string fileContent = (string)HttpContext.Session["file"]; 

    byte[] contentAsBytes = new System.Text.UTF8Encoding().GetBytes(fileContent); 
    return File(contentAsBytes, "text/plain"); 
} 
0

添加您的代碼在Global.asax.cs中保存Session_End中方法:

protected void Session_End(object sender, EventArgs e) 
{ 
... 
} 

或者你也可以使用應用程序級的事件:

protected void Application_End(object sender, EventArgs e) 
{ 
... 
} 
相關問題