如何使用Ajax调用下载Excel?

时间:2019-03-06 13:40:48

标签: ajax spring-mvc

我从spring controllr返回了我的excel文件。但文件没有转换。

控制器:-

Workbook wb = services.downloadExcel(id);
response.setHeader("Content-disposition", "attachment; 
filename=test.xls");
wb.write(response.getOutputStream());
response.flushBuffer();
return wb;

Ajax:-

$.ajax({
    type: "GET",
    url: "/screener/" + projectId,
    success: function (result) {
        console.log(result)
        alert("sfa");
        var blob = new Blob([result], { type: 'application/vnd.ms- 
        excel' });
        var downloadUrl = URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = downloadUrl;
        a.download = "downloadFile.xls";
        document.body.appendChild(a);
        a.click();
    }
});

1 个答案:

答案 0 :(得分:2)

您使用的方法仅适用于纯文本文件,xls不是纯文本,因此您需要将其作为二进制数据检索。

如果您使用的是jQuery 3+,则可以将请求的responseType设置为“ blob”,然后使用该blob创建要下载的blob网址。

jQuery 3 +

$.ajax({
    type: "GET",
    url: "/screener/" + projectId,
    xhrFields:{
        responseType: 'blob'
    },
    success: function (result) {
        console.log(result)
        alert("sfa");
        var blob = result;
        var downloadUrl = URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = downloadUrl;
        a.download = "downloadFile.xls";
        document.body.appendChild(a);
        a.click();
    }
});