您的位置:首页 > 编程语言 > Java开发

遇到问题----struts2文件下载出现Can not find a java.io.InputStream with the name的错误

2015-01-08 15:23 615 查看
struts2文件下载

详见:

java通过struts实现web中的文件下载

用struts2进行文件下载时出现如下错误

Servlet.service() for servlet default threw exception
  
java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] 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)
 

查看StreamResult的源代码才发现是因为InputStream为null的缘故。看下源码:

 
if (inputStream == null) {
  
                // Find the inputstream from the invocation variable stack  
                inputStream = (InputStream) invocation.getStack().findValue(conditionalParse(inputName, invocation));   
            }   
  
            if (inputStream == null) {
  
                String msg = ("Can not find a java.io.InputStream with the name [" + inputName + "] in the invocation stack. " +
  
                    "Check the <param name=\"inputName\"> tag specified for this action.");
  
                LOG.error(msg);   
                throw new IllegalArgumentException(msg);
  
            }  

大家如果也碰到此类问题,直接打印

InputStream in=ServletActionContext.getServletContext().getResourceAsStream(realPath);

System.out.println(in);

如果打印为NULL的话,恭喜您,问题得以解决,问题的原因是这个流的realPath路径错误

也就是说路径错误 getResourceAsStream 如果不会用getResourceAsStream
的路径的话 我们可以 另外获取绝对路径 然后用如下方法:

public InputStream getDownloadFile()
{
this.setFileName();
return ServletActionContext.getServletContext().getResourceAsStream(
"/"+UploadConfigurationRead.getInstance().getConfigItem("uploadFilePath").trim()+"/" + fileName);
}
改成:

public InputStream getDownloadFile throws FileNotFoundException(){
this.setFileName();
    File file = new File("/"+UploadConfigurationRead.getInstance().getConfigItem("uploadFilePath").trim()+"/" + fileName);
    InputStream is = new FileInputStream(file);
    return is;
}

File file = new File("/upload/jd2chm源码生成chm格式文档.rar");  

   InputStream is = new FileInputStream(file);  

   return is;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐