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

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

我在这里缺少什么?

我的后端 Controller :

@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 

请您参考如下方法:

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

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


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!