有个业务需要导出WORD,我直接使用WORD将模板文件另存为XML格式的WORD,放在模板目录,使用DefaultDocument操作并输出。
今天在用DefaultDocument操作XML后输servlet流让用户下载的时候,发现大不开,直接以文本方式查看的时候,发现是文件被截断,最后发现的解决方案是,使用BufferedWriter有,文件能完整下载。

关键代码片段

1
2
3
4
5
6
7
8
9
10
11
12
resp.setContentType("octets/stream");
//转码防止乱码
resp.addHeader("Content-Disposition", "attachment;filename="+new String( fileName.getBytes("gb2312"), "ISO8859-1" )+".doc");

OutputStream outp = resp.getOutputStream();
Document doc = calendarWordService.mainAction(dateHash);

OutputStreamWriter out = new OutputStreamWriter(outp,"UTF-8");
BufferedWriter o = new BufferedWriter(out);
doc.write(o);
o.flush();
o.close();
DefaultDocument 输出到servlet输出流中不完整