文件通过浏览器下载
通过freemarker模板生成文件,并通过浏览器下载下来。两个知识点,1.模板生产文件。2.通过浏览器下载。
第一步很快完成,并且是下载在本地。而到了第二部的时候,愣是不行,查看断点,流肯定是都走网了,而
浏览器就是没有反应,一直对照网上的代码,没啥问题。还把response的头的设置的内容也差了一下,无语,不懂,也是没有反应。
最后,搜索其他人在这个问题上的解答,算是有一点点知道怎么回事了。
后来看框架的往后台传递路径和方式的东西,最后,对照框架有的地方的下载的写法。果然,可以浏览器下载了。最后,完善自己的代码。
最后,后台的代码。
@PreAuthorize("@ss.hasPermi('miyoshi:quo:excel')")
@PostMapping("/excel")
public void freemarkerTemplate2( Quo quo, HttpServletResponse response) throws Exception {
//1. 数据准备
Quo quo1 = quoService.selectQuoById(quo.getId());
QuoDtl quoDtl = new QuoDtl();
quoDtl.setQuoId(quo1.getId());
List<QuoDtl> quoDtls = quoDtlService.selectQuoDtlList(quoDtl);
Map root = new HashMap();
root.put("quo", quo1);
root.put("dtlList", quoDtls);
//2.模板的准备
Configuration conf = new Configuration();
String path = this.getClass().getResource("/").getPath();
conf.setDirectoryForTemplateLoading(new File(path + "/freemarker"));
Template template = conf.getTemplate("quo/444.ftl");
String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, root);
InputStream in = IOUtils.toInputStream(content);
// 定义输出本地
// String dir = "E:\\freemarker";
// Writer out = new FileWriter(dir + "\\704\\12345"+ ".doc");//doc、ftl、xls 可以输出
// template.process(root, out);
//
// out.flush();
// out.close();
// File file=new File(dir + "\\704\\12345.doc");
// downfile(response,file);
// InputStream in = new BufferedInputStream(new FileInputStream(file));
//3.利用流的方式,输出到浏览器
response.setHeader("content-disposition","attachment;fileName="+"student.doc");
int count =0;
byte[] by = new byte[1024];
ServletOutputStream outputStream = response.getOutputStream();
while((count=in.read(by))!=-1){
outputStream.write(by, 0, count);//将缓冲区的数据输出到浏览器
}
in.close();
outputStream.flush();
outputStream.close();
}