文件不会使用HTTP 200代码下载

时间:2018-02-28 15:16:56

标签: javascript java html spring

我想从前端下载文件。该文件是在TestFlow.generateReport方法中生成的。

我的代码一直运行到最后但它没有下载任何东西。它只是将数据打印到console.log

我在这里缺少什么?

我的后端控制器:

@RequestMapping(value = "/flow/generate-report" , method = RequestMethod.GET)
public @ResponseBody void generateFlowReport(@RequestParam("flowName") String flowName, HttpServletResponse response) {
    InputStream resource = TestFlow.generateReport(flowName);
    response.setContentType("application/force-download");
    response.setHeader("Content-Disposition","attachment; filename=report-" + flowName + ".xlsx");
    try {
        IOUtils.copy(resource,response.getOutputStream());
        response.flushBuffer();
        resource.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我的前端代码:

 $('.generateReport').click(function () {
    var flowName = $(this).attr('name');
   $.ajax({
        url: '/flow/generate-report',
        type: 'get',
        data: {flowName: flowName},
        success: function (data) {
            console.log(data);
        }
    })
});

我获得HTTP状态200

HTTP/1.1 200
Content-Disposition: attachment; filename=report-tellerFlow.xlsx
Content-Type: application/xlsx
Transfer-Encoding: chunked

2 个答案:

答案 0 :(得分:0)

Content-Type: application/force-download标题可能并不总是有效,因为某些浏览器/网络客户端可能不支持附件下载。

尝试更改为Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这是正确的XLSX类型,然后查看浏览器/ Web客户端的文档。根据{{​​3}}使用Ajax下载文件可能无法在您的Web客户端中运行。

答案 1 :(得分:0)

我不确定XHR请求是否可以在浏览器上触发下载对话框。您可能希望使用下载URL生成新窗口 - 浏览器应检测内容处理并相应地处理下载。

如果您仍想使用XHR,则需要使用Blob代替 - JavaScript blob filename without link