如何下载从c#Controller发送到Ajax Response的excel文件

时间:2016-12-28 17:13:49

标签: javascript ajax asp.net-mvc asp.net-ajax

我一直在尝试下载我在以下控制器方法中返回的文件

 [HttpGet]
    public FileResult TestGenerateFile(Guid[] userIDs, Guid reportID)
    {
        Guid reportRunID = Guid.NewGuid();

        ViewBase.LoadViewBase();
        IMVCWebPage page = ViewBase.MVCWebPage;

        string filePath = manager.GenerateTestFile(reportRunID, reportID, page.SelectedItemID.Value, userIDs);

        System.IO.FileStream fileStream = new System.IO.FileStream(filePath, System.IO.FileMode.Open);

        fileStream.Flush();

        return File(fileStream, "application/vnd.ms-excel", Path.GetFileName(filePath));
    }

,但每次我在我的ajax成功方法中使用Blob(数据)设法获得一个另存为对话框时,我的excel文件在打开时发出警告并且该文件有许多奇怪的字符,如下所示:

Corrupted excel File Screenshot http://i65.tinypic.com/ixuw77.jpg

我还可以从开发人员工具中看到请求成功,如果我从开发人员工具中复制URL并在单独的选项卡中运行(或在新选项卡中打开),则文件正确下载而不会损坏任何文件数据

ajax代码:

testReportOutputFileGeneration: function () {
            $.ajax({
                url: window.applicationVirtualPath + '/Reports/TestGeneratefile',
                type: "GET",
                dataType: 'application/vnd.ms-excel',
                data: {
                    userIDs: userIDs.value,
                    reportID: $("#lblreport_id").text()
                },
                success: function (data) {
                    console.log(data);
                    var blob = new Blob([data], { type: 'application/vnd.ms-excel' });

                    var objectUrl = URL.createObjectURL(blob);
                    window.open(objectUrl);

                },
                error: function () { console.log("Error")}
            });
        },

所以我的问题是:有没有办法增强这个ajax来提示用户使用另存为对话框并正确保存excel而没有任何奇怪的字符?提前谢谢。

0 个答案:

没有答案