0

我尝试使用以下代码在 C# .net MVC 中使用 ajax 下载文件。由于某种原因,没有工作。有谁知道为什么?

我期待文件将被下载或将弹出一个窗口对话框,要求用户在调用函数 downloadFile 后选择保存目录

Javascript:

function downloadFile(even) {
    $.ajax({
        url: "/Home/Download",
        type: "POST",
        data: {
            fileName: even.id
        },
        success: function (returnValue) {
            window.location = returnValue;
        },
        error: function (data) {

        }
    });
}

C#脚本:

[Authorize]
[HttpPost]
public virtual FileResult Download(string fileName)
{
    var file = (fileName.Contains("hl7s") == true ? fileName + ".zip" : fileName + ".txt");
    byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\temp\"+ file);
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}
4

2 回答 2

0

只需使用 HTML 下载属性下载文件

<a href="you file location" download></a>

请参阅链接以获取更多信息

于 2019-02-21T08:52:37.673 回答
0

这样做并不是那么简单,但是,有一个脚本可以帮助您。我通常使用FileSaver.js来执行此操作,它是开源的。FileSaver 有助于解决浏览器不兼容问题,它也经过了很好的测试。

这是我从当前项目中提取的代码片段。这是纯 javascript,不需要 jQuery 或任何东西。

在此示例中,文件名被硬编码为“my_excel_file.xlsx”,但如果您从 api 公开适当的标头,则可以从 api 获取文件名。我想我回答了如何在 SO 中的某个地方处理这个问题。

<html>
  <head>
  <script src="FileSaver.min.js"></script>
  <script>        
    function download() {            
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://your.url", true);
        xhr.setRequestHeader("Content-type","application/json");
        xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
        xhr.setRequestHeader("Accept", "application/octet-stream");
        //xhr.setRequestHeader("Authorization", "Bearer ......");
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var blob = new Blob([xhr.response], {type: "octet/stream"});
                var fileName = "my_excel_file.xlsx";
                saveAs(blob, fileName);
            }
        }
        xhr.responseType = "arraybuffer";
        xhr.send();
    }        
  </script>
</head>
<body>
  <button onclick="javascript:download()">Download Excel File</button>
</body>
</html>
于 2019-02-21T04:25:44.337 回答