【问题标题】:File Download using asp.net mvc使用 asp.net mvc 下载文件
【发布时间】:2014-12-15 05:06:02
【问题描述】:

我尝试使用以下代码。但它不起作用。

public FileResult download(string path)
{
   return File(path, "application/pdf", Server.UrlEncode(path));
}

我的 Ajax 代码是:

function fileDownload(path) { 
    $.ajax({ 
       url: '/Home/download', 
       data: { path: path }, 
       type: 'POST', 
       async: false, 
       success: function (data) { } 
    }); 
}

【问题讨论】:

  • 代码是否命中了控制器?

标签: asp.net-mvc download


【解决方案1】:

您通常希望将文件名映射到服务器上的物理路径,例如假设用户选择文件Foo.pdf,所有内容文件都在~/Content文件夹中:

public FileResult download(string path)
{ 
    string actualPath = Server.MapPath("~/Content/" + path);
    return File(actualPath, "application/pdf", Server.UrlEncode(path)); 
}

但是,从安全角度来看,允许用户直接指定文件名是可疑的 - 您可能想要考虑其他替代方案,例如可用文件的表或字典,并强制浏览器选择其中一个通过密钥获取可用文件 - 这样恶意用户就无法通过网络钓鱼获取不应该提供的文件。

编辑,看到OP想要Ajax之后

Ajaxing 文档应该可以工作,尽管以这种方式下载不会呈现 PDF - 您需要将文档传递给可编写脚本的 PDF 查看器或类似工具。

您可以生成一个简单的链接、按钮或图像,而不是 ajax 文档,用户可以单击它们来调用控制器操作并下载 PDF:

 @Html.ActionLink("Click to download", "download", new {path = "MyNicePDF.pdf"})

【讨论】:

  • @HardikMansaraa 您需要获得Did not Work 的资格。没有渲染文件?给你一个错误?等
【解决方案2】:
function DownloadAndReturnBackAttachment(linkHref) {

    $.fileDownload(linkHref, {

        successCallback: function (url) {
            gvScanDocuments.PerformCallback();
            gvScanDocuments.UnselectRows();

        },

        failCallback: function (url) {
            alert("A file download error has occurred, please try again.");
            gvScanDocuments.PerformCallback();
            gvScanDocuments.UnselectRows();

        }

    });
} 

【讨论】:

    【解决方案3】:

    使用 window.location 方法完成此任务。

    您也可以为此使用 HTML 标记:

    <a href="Path" download="Filename">download me</a>
    

    【讨论】:

      【解决方案4】:
      public FileResult Download(string path)
      {
            byte[] fileBytes = System.IO.File.ReadAllBytes(path);
            string fileName = "your file name";
            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);         
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-06
        • 1970-01-01
        • 2017-03-23
        • 2023-04-07
        • 1970-01-01
        • 2012-01-25
        • 2014-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多