有时有很多需求如将文件打印在浏览器即在浏览器直接显示文件的内容
于是就有了下面的code:
/**
* 给定的文件在浏览器中展示
* @param response 响应
* @param doc doc对象
* @param fileUrl 文件的绝对路径
* @param fileName 文件名称,意义不大
*/
public void writeToBrower(HttpServletResponse response , Document doc , String fileUrl , String fileName) {
try {
//获取响应流
ServletOutputStream docsos = response.getOutputStream();
//返回流的格式如编码等
HtmlSaveOptions saveOptions = new HtmlSaveOptions(SaveFormat.HTML);
saveOptions.setEncoding(Charset.forName("UTF-8"));
saveOptions.setExportImagesAsBase64(true);
//数据来源方式
if(doc == null) {//doc为空,从文件读取数据并以流的方式在浏览器中展示
File file = new File(fileUrl);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
int blen = 0;
byte[] buffer = null;
while((blen = bis.read(buffer)) > 0) {
docsos.write(buffer, 0, blen);
}
docsos.flush();
}else {//doc不为空 ,利用doc以流的方式向浏览器写入数据进行展示
doc.save(docsos, saveOptions);
}
response.setContentType("application/OCTET-STREAM;charset=UTF-8");
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
// 设置下载文件名称
response.setHeader("Content-Disposition", "attachment; filename="
+ fileName);
} catch (Exception e) {
e.printStackTrace();
}
}
备注:
该方法中文件的来源有两种,一种是匹配word模板后生成的doc对象,一种是纯文本文件的绝对路径。