- Servlet.service() for servlet default threw exception
- java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [inputStream] in the invocation stack. Check the <param name="inputName"> tag specified for this action.
- at org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:189)
- at org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
- at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
- at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
- at com.best.top.validate.TopInterceptor.intercept(TopInterceptor.java:47)
- at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
- at com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
- at com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
- at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
- at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
- at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
- at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:419)
刚看到这个文件 还以为是文件名写错了,反复换了好几次,还是不对,后来才发现,原来的获取不到inputStream这个方法.
不过网上也有许多这种错误,有的是获取不到文件路径的。
//在Actionkh 返回下载文件的二进制输入流对象的方法
public InputStream getInputStream(){
try {
File file=new File(filepath+"/"+filename);
InputStream is=new FileInputStream(file);
return is;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new RuntimeException("获取文件失败");
}
}
在struts.xml中的配置:
<package name="download" namespace="/" extends="struts-default">
<action name="downloadAction" class="cn.itcast.web.download.DownloadAction" method="excute">
<!--
-->
<param name="filepath">
E:\Program Files\apache-tomcat-6.0.32\webapps\day34\download
</param>
<result name="download" type="stream">
<param name="contentType">jpg/jpeg</param>
<!-- 下载文件的打开方式 -->
<param name="contentDisposition">attachment;filename="${filename}"</param>
<!-- 获取下载文件的二进制输入流对象,即InputStream -->
<param name="getinputName">inputStream</param>
</result>
</action>
</package>
在struts.xml中获取方法名时需要去掉get和(),然后将大写字母改为小写,如上的红色文字