poi生成exceli后如何在前端访问下载。我的一直没法响应下载内容,能帮忙看看什么情况嘛
前端请求
controller
service
生成方法
poi生成exceli后如何在前端访问下载。我的一直没法响应下载内容,能帮忙看看什么情况嘛
前端请求
service
生成方法
对你的代码进行了一下改动,仅供参考:
没有响应:需要在后端响应中设置正确的响应头以便前端可以成功下载文件。您需要设置响应头Content-Disposition的值为"attachment;filename=文件名.xls",其中文件名为您要下载文件的名称,同时要注意文件名需要进行URL编码。
另外,您还需要在前端的AJAX请求中设置responseType为"blob",以便获取二进制数据流并保存为文件。
@RequestMapping("/downloadTemplate")
public ResponseEntity<byte[]> downloadTemplate(String projMxcellId, String slMxcellId) throws IOException {
// 生成Excel
HSSFWorkbook workbook = new HSSFWorkbook();
this.exportExcel(workbook);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "测试模板.xls");
// 返回Excel二进制数据流
ByteArrayOutputStream out = new ByteArrayOutputStream();
workbook.write(out);
return new ResponseEntity<>(out.toByteArray(), headers, HttpStatus.OK);
}
private void exportExcel(HSSFWorkbook workbook) {
// 创建sheet等
...
}
$.ajax({
url: "${ctx}/qh/eval/downloadTemplate?projMxcellId=" + projMxcellId + "&slMxcellId=" + slMxcellId,
type: "GET",
xhrFields: {
responseType: "blob"
},
success: function(data) {
// 下载文件
var a = document.createElement("a");
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = "测试模板.xls";
a.click();
window.URL.revokeObjectURL(url);
},
error: function(xhr, status, error) {
console.error(error);
}
});
请注意,上述代码中的URL链接需要根据您的具体情况进行修改,以便正确获取Excel文件并进行下载。