需求:需要传入集合到后台查询数据,并导出excel,这时候get方式就不好用了,需要post请求带集合参数传入后台
ajax本身不支持下载文件,所以实现这个需求要分两步:
1、使用ajax带集合参数去后台请求数据并生成文件;
2、在请求成功的函数中创建get请求的链接进行下载
============
前端代码:
$.ajax({
async: true,
url: url,
type: "post",
dataType: "json",
data: data,
success: function (result, status, xhr) {
// 创建get请求路径
let downloadUrl = "../FileDownloadExport?fileName="+data.fileName;
// 创建a标签
let label = $("<a>");
// 添加属性
label.prop("href",downloadUrl);
// 追加标签
$("body").append(label);
// 点击a标签,为什么要加[0]不懂,不加点击函数不生效
label[0].click();
// 点击后移除标签
label.remove();
},
error: function (xhr, status, error) {
alert("请求失败")
}
});
=============
后端请求文件代码(调用了hutool的工具类):
@PostMapping("/FileDownloadRequest")
@ResponseBody
protected Map<String,String> doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
// 文件存储路径
String path = "D:/fileupload/file/Export/";
// 文件名
String fileName = request.getParameter("fileName");
// 获取导出文件格式
String op = request.getParameter("op");
// 条件集合对象
Map<String, String> map = new HashMap<>();
// 存放题目数据
List<Question> questionsForExport = questionService.getQuestionsForExport(map);
// 转换集合类型
ArrayList<Question> questionArrayList = CollUtil.newArrayList(questionsForExport);
if ("exportExcel".equals(op)){
// 导出excel文件
ExcelWriter writer = ExcelUtil.getWriter(path + fileName);
writer.write(questionArrayList,true);
writer.close();
}else if ("exportWord".equals(op)){
//导出word文件
Word07Writer word07Writer = new Word07Writer();
for (Question question : questionArrayList) {
word07Writer.addText(new Font("微软雅黑",Font.PLAIN,16), question.toString());
}
File file = FileUtil.file(path + fileName);
word07Writer.flush(file);
word07Writer.close();
}else if ("exportTxt".equals(op)){
// 导出txt文件
FileWriter fileWriter = new FileWriter(path+fileName);
fileWriter.writeLines(questionsForExport);
}
Map<String,String> fileInfoMap = new HashMap<>();
fileInfoMap.put("fileName", fileName);
return fileInfoMap;
}
==============
后端下载文件代码(调用了在hutool工具类的基础上封装的工具类):
@GetMapping("/FileDownloadExport")
protected void doDownload(HttpServletRequest request, HttpServletResponse response) throws IOException{
String path = "D:/fileupload/file/Export/";
String fileName = request.getParameter("fileName");
// 文件写入输出流
DownloadUtil.downLoadFile(path, fileName, response);
}
更多推荐
使用ajax请求下载excel文件
发布评论