先上效果图:
先说个问题尽量避免使用Jquery ajax下载excl ,ajax暂不支持返回类型 "流 " 类型,支持json,html,text,xml 类型;可以使用location.href 等,如果非要使用ajax可以请求成功之后我们通过创建一个 <a> 标签然后添加 href属性,最后触发该属性就OK了
有很多写下载excl模板的帖子,很少有人注意小细节: 别忘了导入poi ,io jar包
js代码就不看了:小编使用的location.hre 方式
看看Controller 后台代码吧:
public void downLoadExclOut(HttpServletRequest request,HttpServletResponse response,String url)throws Exception{ try{ if(url!=null){ //校验文件是不是.xlsx 结尾的 if(url.endsWith(".xlsx")){ //获取要下载的模板名称 String fileName = url; // 设置输出的格式 response.reset(); // 设置要下载的文件的名称 response.setHeader("Content-disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8")); // 通知客服文件的MIME类型 response.setContentType("application/vnd.ms-excel;charset=UTF-8"); //获取文件的路径 String excelPath = request.getSession().getServletContext().getRealPath("/excl/"+fileName); //创建输入流对象,读取指定的文件 FileInputStream input = new FileInputStream(excelPath); //创建文件输出流对象 OutputStream out=response.getOutputStream(); byte[] b = new byte[2048]; int len; while ((len = input.read(b)) != -1) { out.write(b, 0, len); }; input.close(); } } }catch (Exception e){ e.printStackTrace(); } }
这个就是控制层的代码 ,如果你对流有点理解及很容易看懂;