使用asp.net mvc下载文件

3
我尝试使用以下代码。但它没有起作用。
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) { } 
    }); 
}

代码是否已触发控制器? - Aravindan
4个回答

4

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

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

然而,从安全角度考虑,允许用户直接指定文件名是可疑的 - 你可以考虑其他替代方案,例如可用文件的表格或字典,并通过键强制浏览器选择其中一个可用文件 - 这样恶意用户就无法钓取不应提供的文件。
在查看 OP 要求使用 Ajax 后进行编辑:
将文档 Ajax 下载下来应该可以工作,但是以这种方式下载不会呈现 PDF - 你需要将文档传递给可脚本化的 PDF 查看器或类似工具。
你可以生成一个简单的链接、按钮或图像,用户可以点击它来调用控制器操作并下载 PDF,而不是将文档 Ajax 下载。
 @Html.ActionLink("Click to download", "download", new {path = "MyNicePDF.pdf"})

@HardikMansaraa,你需要明确“Did not Work”的具体情况。是没有生成文件?还是出现了错误?等等。 - StuartLC

1
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();

        }

    });
} 

1

这个任务可以使用window.location方法完成。

同时,你也可以使用HTML标签来实现:

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

0
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);         
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接