小编Kam*_*osD的帖子

从ajax中的服务器响应中获取excel文件(.xlsx)

在使用该文件获得响应(成功ajax方法)后,我在浏览器中获取excel文件和打开下载窗口时遇到问题.我有合适的Content-Type and Content-Disposition headers,我尝试在js中使用Blob而我无法实现我想要的 - 简单的文件下载.
我完成了我的ajax的几个版本,其中一个版本在下面.我开发了ajax,它返回excel文件,因为它已损坏而无法正常打开(尽管扩展名为.xlsx).

也许问题是Blob构造函数中使用的不适当的数据类型?

我尝试使用"xhr.response"而不是成功方法参数中的"data",但它也不起作用.我在Chrome中的开发者工具中检查了响应标题,并且设置正确.
重要的是 - 在服务器端创建的所有excel工作簿都是正确的,因为它在先前版本中工作时数据是在URL中发送的,而不是在ajax发布中.

Java/Spring服务器端的控制器方法如下:

response.reset();
response.setContentType("application/vnd.ms-excel");
response.addHeader("Content-Disposition","attachment;filename=\"" + className + " " +  title + ".xlsx\"");
    try (ServletOutputStream output = response.getOutputStream()){
        workbook.write(output);
        output.flush();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
Run Code Online (Sandbox Code Playgroud)

我的Ajax下载文件并打开下载窗口:

$.ajax({
    url: myUrl,
    type: 'POST',
    data: myData,
    success: function(data, status, xhr) {
        var contentType = 'application/vnd.ms-excel';

        var filename = "";
        var disposition = xhr.getResponseHeader('Content-Disposition');
        if (disposition && disposition.indexOf('attachment') !== -1) {
            var filenameRegex = …
Run Code Online (Sandbox Code Playgroud)

javascript ajax excel content-type content-disposition

5
推荐指数
2
解决办法
2万
查看次数