通过Struts2 Rest传输文件
我需要用Struts2 REST来传输文件。虽然流很好,但Web服务器抛出错误: 异常处理结果:java.io.IOException:UT010029:流已关闭 以下是行动代码:通过Struts2 Rest传输文件,rest,struts2,stream,struts2-rest-plugin,Rest,Struts2,Stream,Struts2 Rest Plugin,我需要用Struts2 REST来传输文件。虽然流很好,但Web服务器抛出错误: 异常处理结果:java.io.IOException:UT010029:流已关闭 以下是行动代码: public HttpHeaders index() { try { // ... response.setContentType(vo.getContentType()); response.setContentLength(bytes.leng
public HttpHeaders index() {
try {
// ...
response.setContentType(vo.getContentType());
response.setContentLength(bytes.length);
response.addHeader("Content-disposition", "attachment;filename=\"" + fileName + "\"");
response.getOutputStream().write(bytes);
} catch( Exception e ) {
log.error(e);
}
return new DefaultHttpHeaders("index");
}
Web服务器日志:
13-04-2018 16:01:28,335 INFO [org.apache.struts2.rest.RestActionInvocation] (default task-15) Executed action [//api/blablaAction!index!json!200] took 208 ms (execution: 16 ms, result: 192 ms)
13-04-2018 16:02:08,927 ERROR [org.apache.struts2.rest.RestActionInvocation] (default task-16) Exception processing the result.: java.io.IOException: UT010029: Stream is closed
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:136) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:128) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at org.apache.struts2.rest.DefaultContentTypeHandlerManager.handleResult(DefaultContentTypeHandlerManager.java:199) [struts2-rest-plugin-2.3.34.jar:2.3.34]
at org.apache.struts2.rest.RestActionInvocation.executeResult(RestActionInvocation.java:232) [struts2-rest-plugin-2.3.34.jar:2.3.34]
at org.apache.struts2.rest.RestActionInvocation.processResult(RestActionInvocation.java:197) [struts2-rest-plugin-2.3.34.jar:2.3.34]
at org.apache.struts2.rest.RestActionInvocation.invoke(RestActionInvocation.java:145) [struts2-rest-plugin-2.3.34.jar:2.3.34]
at com.opensymphony.xwork2.DefaultActionProxy.execute(DefaultActionProxy.java:147) [xwork-core-2.3.34.jar:2.3.34]
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:575) [struts2-core-2.3.34.jar:2.3.34]
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) [struts2-core-2.3.34.jar:2.3.34]
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) [struts2-core-2.3.34.jar:2.3.34]
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) [undertow-servlet-1.1.8.Final.jar:1.1.8.Final]
我能够通过使用自定义ContentTypeHandler解决这个问题