2011-04-04 83 views
1

我已經使用getCSV功能在客戶端返回的CSV文件的完整下載後文件,但我想刪除在客戶端下載完成後文件如何刪除客戶端PC上的MVC asp.net

我函數

Public Function GetCSVFile(ByVal listSeperator As String) As CSVResult 
    Dim result As Boolean 
    Dim Service As New Service() 
    Dim types As IList(Of ProductType) = Service.GetAllWithAllLocalizedNames(New ListOptions(Name", OrderByDirection.Ascending, 1, -1)) 
    Dim path As String, colname As String 
    colname = Settings.GetLanguage() 
    path = Common.GetLocalizeDataPath() 
    Dim seprator As String = Common.GetListSepratorForCSV(listSeperator) 
    Dim cs As New CSVGenerator(path, colname, seprator) 
    result = cs.CreateCSVFile(types) 
    If result Then 
     Return New CSVResult With {.FileName = "Sample.csv", .Path = "~/Mydir/Sample.csv"} 
    Else 
     Return New CSVResult With {.FileName = "Error.csv", .Path = "~/Mydir/Error.csv"} 
    End If 
End Function 

回答

0

我看到你寫了一個自定義的CSVResult類。您可以在將文件寫入ExecuteResult方法中的響應流後刪除該文件。顯然,更好的方法是永不生成文件,但直接從內存提供CSV並將其寫入響應流。

0

科瑞類和繼承形式actionfilterattribute和覆蓋OnResultExecuted方法

Public Class DeleteFileAttribute 
    Inherits ActionFilterAttribute 
    Public Overrides Sub OnResultExecuted(ByVal filterContext As ResultExecutedContext) 
     Dim path As String = filterContext.HttpContext.Server.MapPath("~/LocalizeData") 
     Dim filename As String = DirectCast(filterContext.Result, CSVResult).FileName 'filterContext.RouteData.Values("Path").ToString() 
     If File.Exists(System.IO.Path.Combine(path, filename)) Then 
      File.Delete(System.IO.Path.Combine(path, filename)) 
     End If 

    End Sub 
End Class 

和功能應用刪除屬性

例如

<DeleteFile()> 
Public Function GetCSVFile(ByVal listSeperator As String) As CSVResult 
    Dim result As Boolean 
    Dim Service As New Service() 
    Dim types As IList(Of ProductType) = Service.GetAllWithAllLocalizedNames(New ListOptions(Name", OrderByDirection.Ascending, 1, -1)) 
    Dim path As String, colname As String 
    colname = Settings.GetLanguage() 
    path = Common.GetLocalizeDataPath() 
    Dim seprator As String = Common.GetListSepratorForCSV(listSeperator) 
    Dim cs As New CSVGenerator(path, colname, seprator) 
    result = cs.CreateCSVFile(types) 
    If result Then 
     Return New CSVResult With {.FileName = "Sample.csv", .Path = "~/Mydir/Sample.csv"} 
    Else 
     Return New CSVResult With {.FileName = "Error.csv", .Path = "~/Mydir/Error.csv"} 
    End If 
End Function 

和執行結果多了一個問題,請刷新反應並關閉它

context.HttpContext.Response.Flush() 
context.HttpContext.Response.End() 
6

只適用於我,如果你刷新響應。屬性過濾器應該看起來像這樣

public class DeleteTempFileResultFilter : ActionFilterAttribute 
    { 
     public override void OnResultExecuted(ResultExecutedContext filterContext) 
     { 
      string fileName = ((FilePathResult)filterContext.Result).FileName; 

      filterContext.HttpContext.Response.Flush(); 
      filterContext.HttpContext.Response.End(); 

      System.IO.File.Delete(fileName); 
     } 
    } 
0

希望這會幫助你。首先,您需要將數據寫入服務器上的文件,然後使用提供選項給客戶端下載文件。之後使用file.delete刪除服務器上的文件

Response.ContentType = ContentType; 
Response.AppendHeader("Content-Disposition","attachment;filename=myFile.txt"); 
Response.WriteFile(Server.MapPath("~/FilePath")); 
Response.Flush(); 
System.IO.File.Delete(Server.MapPath("~/FilePath")); 
Response.End();