做项目的时候用poi向word模板写入数据,在前段用创建iframe的方式进行下载,结果下载的时候报错了。
错误信息如下:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : The part /docProps/core.xml fail to be saved in the stream with marshaller org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller@d5b0700
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:502)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1467)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:217)
at com.hhwy.bjyps.meeting.controller.MeetingController.generateMeetingDoc(MeetingController.java:205)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at com.hhwy.framework.mvc.DispatchServlet.doDispatch(DispatchServlet.java:931)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at com.hhwy.framework.mvc.DispatchServlet.doService(DispatchServlet.java:386)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at com.hhwy.sso.client.filter.SessionFilter.doFilter(SessionFilter.java:129)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:603)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
at com.hhwy.framework.mvc.GlobalMethodHandlerExeptionResolver.resolveException(GlobalMethodHandlerExeptionResolver.java:82)
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1167)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1004)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
at com.hhwy.framework.mvc.DispatchServlet.doDispatch(DispatchServlet.java:931)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at com.hhwy.framework.mvc.DispatchServlet.doService(DispatchServlet.java:386)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at com.hhwy.sso.client.filter.SessionFilter.doFilter(SessionFilter.java:129)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)代码在楼下:
错误信息如下:org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : The part /docProps/core.xml fail to be saved in the stream with marshaller org.apache.poi.openxml4j.opc.internal.marshallers.ZipPackagePropertiesMarshaller@d5b0700
at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:502)
at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1467)
at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:217)
at com.hhwy.bjyps.meeting.controller.MeetingController.generateMeetingDoc(MeetingController.java:205)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at com.hhwy.framework.mvc.DispatchServlet.doDispatch(DispatchServlet.java:931)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at com.hhwy.framework.mvc.DispatchServlet.doService(DispatchServlet.java:386)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at com.hhwy.sso.client.filter.SessionFilter.doFilter(SessionFilter.java:129)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.Response.getWriter(Response.java:603)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:211)
at com.hhwy.framework.mvc.GlobalMethodHandlerExeptionResolver.resolveException(GlobalMethodHandlerExeptionResolver.java:82)
at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1167)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1004)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:955)
at com.hhwy.framework.mvc.DispatchServlet.doDispatch(DispatchServlet.java:931)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
at com.hhwy.framework.mvc.DispatchServlet.doService(DispatchServlet.java:386)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at com.hhwy.sso.client.filter.SessionFilter.doFilter(SessionFilter.java:129)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1347)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)代码在楼下:
public void generateMeetingDoc(@RequestParam Map<String, String> params, HttpServletRequest req, HttpServletResponse res) { OutputStream os = null;
try {
Meeting meeting = meetingService.getMeetingById(params.get("id"));
String filePath = req.getServletContext().getRealPath("/")+File.separator+"template"+File.separator+"meetingNotice.docx"; String name = meeting.getName()+"(会议通知).docx";
XWPFDocument doc = meetingService.generateMeetingDoc(meeting, filePath);
boolean isMSIE = HttpUtils.isMSBrowser(req);//判断浏览器设置编码
if (isMSIE) {
name = URLEncoder.encode(name, "UTF-8");
} else {
name = new String(name.getBytes("UTF-8"), "ISO-8859-1");
}
res.reset();
res.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
res.setHeader("Content-disposition", "attachment;filename=\"" + name + "\"");
os = res.getOutputStream();
doc.write(os);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}public XWPFDocument generateMeetingDoc(Meeting meeting, String templateFile) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分");
//处理参数
Map<String, String> params = new HashMap<>();
params.put("filePath", templateFile);
params.put("${name}", meeting.getName());
if(meeting.getReviewTime() != null) {
params.put("${time}", sdf.format(meeting.getReviewTime()));
} else {
params.put("${time}", "");
}
if(StringUtils.isNotBlank(meeting.getMeetingroom())) {
params.put("${place}", dao.findById(meeting.getMeetingroom(), DictItem.class).getItemName());
} else {
params.put("${place}", "");
} User user = dao.findById(meeting.getContacts(), User.class);
if(ConfigHelper.getConfig("unit.jj").equals(user.getOrgId())) {
params.put("${special}", "(技经)");
} else if(ConfigHelper.getConfig("unit.zz").equals(user.getOrgId())) {
params.put("${special}", "(技术)");
} else {
params.put("${special}", "");
}
params.put("${userDept}", user.getOrgIdName());
params.put("${userName}", user.getUserName());
params.put("${userTel}", user.getMobile()); String proList = "";
for(int i=1; i<=meeting.getProList().size(); i++) {
proList += i + "." + meeting.getProList().get(i-1).getName()+"\n\t";
} params.put("${projectList}", proList);
params.put("${agenda}", meeting.getAgenda());
params.put("${attendUnit}", meeting.getAttendUnit());
params.put("${aquirement}", meeting.getAquirement());
return getDoc(params);
} private XWPFDocument getDoc(Map<String, String> params) {
try {
XWPFDocument document = new XWPFDocument(new FileInputStream(new File(params.get("filePath"))));
params.remove("filePath");
Iterator<XWPFParagraph> itPara = document
.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = itPara.next();
String text = paragraph.getText();
for (Entry<String, String> entry : params.entrySet()) {
if (StringUtils.isNotBlank(entry.getValue())) {
text = text.replace(entry.getKey(), entry.getValue());
} else {
text = text.replace(entry.getKey(), "");
}
} List<XWPFRun> runs = paragraph.getRuns();
for (int i = 0; i < runs.size(); i++) {
if (runs.get(i) != null) {
runs.get(i).setText("", 0);
//将所有的XWPFRun都置空
}
if (i == 0) {
runs.get(i).setText(text, 0); //将第一个XWPFRun的值存整个XWPFParagraph的字符串
}
}
}
return document;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
前段采用两种方式,一种创建iframe下载,一种使用window.open()方式下载, window.open()的方式不会报错,创建iframe的方式会报错。但是为了体验好,不想使用window.open()的方式。下面是前段的代码,烦请各位大大帮忙查查是什么问题//生成会议通知文件
issue:function(btn,params){
var main = this;
main.formEditData43448(btn,params);
/*var elemIF = document.createElement("iframe");
elemIF.src = basePath+"meeting/generateMeetingDoc?id="+main.putData.id;
elemIF.style.display = "none";
console.log(elemIF.src)
document.body.appendChild(elemIF);*/
window.open(basePath+"meeting/generateMeetingDoc?id="+main.putData.id);
}
把 public void generateMeetingDoc改为 public String generateMeetingDoc最后return null试试。
把 public void generateMeetingDoc改为 public String generateMeetingDoc最后return null试试。这个我之前试过...没用...