如何允许用户将文件下载到自己的硬盘 - MVC

时间:2011-10-11 20:06:40

标签: asp.net-mvc download

我的MVC网络应用程序中的一个视图具有允许用户查看存储在服务器计算机上的特定文本文件的URL。这是相关的控制器功能(假设路径已经定义):

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

以上是在视图中通过简单的东西调用,即<%=Html.ActionLink("View File", "DownloadResults")%>。当用户单击“查看文件”URL时,会将其重定向到URL,其中文本文件的内容将打印在浏览器的页面上。

然而,我想要做的是弹出一个对话框,询问用户是否要下载该文件,并在确认后将.txt的物理副本下载到他们的Downloads文件夹中。实现这一目标的最佳方法是什么?

1 个答案:

答案 0 :(得分: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);
    }
}

由Phill Haack撰写:http://haacked.com/archive/2008/05/10/writing-a-custom-file-download-action-result-for-asp.net-mvc.aspx