2011-10-11 63 views
0

一個對我的MVC的Web應用程序的意見,有網址,讓用戶查看存儲在服務器上的特定的文本文件。以下是相關的控制器功能(假設路徑已定義):如何允許用戶下載文件到自己的硬盤 - MVC

Public Function DownloadResults() As ActionResult 
     Return File(path, "text/plain") 
End Function 

上面通過簡單的東西,即<%=Html.ActionLink("View File", "DownloadResults")%>叫,在視圖中。當用戶點擊查看文件的URL,他們將被重定向到文本文件的內容被印在瀏覽器頁面上的URL。

我想怎麼辦,但是,是彈出一個對話框,詢問用戶是否要下載的文件,並在確認後,.TXT的物理拷貝下載到他們的下載文件夾中。什麼是實現這一目標的最佳方式是什麼?

回答

1

您需要在響應頭設置附件。爲了這個目的,你可以箱子ActionResult例如:

public class DownloadResult : ActionResult { 

    public DownloadResult() { 
    } 

    public DownloadResult(string virtualPath) { 
    this.VirtualPath = virtualPath; 
    } 

    public string VirtualPath { 
    get; 
    set; 
    } 

    public string FileDownloadName { 
    get; 
    set; 
    } 

    public override void ExecuteResult(ControllerContext context) { 
    if (!String.IsNullOrEmpty(FileDownloadName)) { 
     context.HttpContext.Response.AddHeader("content-disposition", 
     "attachment; filename=" + this.FileDownloadName) 
    } 

    string filePath = context.HttpContext.Server.MapPath(this.VirtualPath); 
    context.HttpContext.Response.TransmitFile(filePath); 
    } 
} 

由菲爾·哈克:http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx

相關問題