我想从前端下载一个文件。该文件是在 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 客户端中运行。