javascript - 通过 ajax 打开 FileStreamResult(作为下载的文件)

标签 javascript asp.net-mvc

是否可以使用 ajax 调用将 FileStreamResult 作为下载文件打开?

Controller 方法

public FileStreamResult DownloadPDF()
{
        var stream = myHandler.getFileStream("myfile.pdf");
        return File(stream, "application/pdf", "myfile.pdf"));
}

HTML代码

<a href="#" class="mydownload">Click Me</a>
<script type="text/javascript>
    $("a.mydownload").click(function () {
        $.ajax({
            method: 'GET',
            url: 'http://myserver/file/DownloadPDF',
            success: function (data, status, jqXHR) {
                var blob = new Blob([data], { type: "application/pdf" })
                var url = window.URL.createObjectURL(blob);
                var a = document.createElement("a");
                document.body.appendChild(a);
                a.href = url;
                a.click();

            }
        });
    });
</script>

在 IE 上运行我被拒绝访问,但在 Chrome 上运行正常。然而,我确实得到了一个“空白”/无效的 pdf。

最佳答案

使用 XMLHttpRequest()responseType设置为 "blob" , 添加 download属性为 <a>元素

$("a.mydownload").click(function () {
    var request = new XMLHttpRequest();
        request.responseType = "blob";
        request.open("GET", "http://myserver/file/DownloadPDF");
        request.onload = function() {
            var url = window.URL.createObjectURL(this.response);
            var a = document.createElement("a");
            document.body.appendChild(a);
            a.href = url;
            a.download = this.response.name || "download-" + $.now()
            a.click();
        }
        request.send();
});

或者,您可以使用 jquery-ajax-blob-arraybuffer.js .另见 Add support for HTML5 XHR v2 with responseType set to 'arraybuffer' on $.ajax

关于javascript - 通过 ajax 打开 FileStreamResult(作为下载的文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37462263/

相关文章:

javascript - 仅当按下特定提交按钮时才将表单提交到新窗口?

javascript - 使用 jquery 以 (mm/dd/yyyy) 格式获取两个日期之间的月差

c# - 在 ASP.NET MVC 应用程序中锁定一个全局对象时是否可能出现死锁?

jquery - 如何让jquery文件上传回发除[httpPost]index.cshtml()之外的指定操作?

c# - 我如何在 C# 中为本地主机验证 url

javascript - 调用 id() 时出现意外标记)

javascript - WordPress 外部脚本不工作

javascript - 如何根据 REACT 中的文本输入从 API 进行搜索

c# - 当我将长查询粘贴到变量中时出现错误(ASP.NET MVC RAZOR)

c# - 如何通过 'ESC' 按键导航到之前访问过的页面。 ASP.NET MVC(C#)