Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack问题解决

来源:互联网 发布:中国有多少混血儿知乎 编辑:程序博客网 时间:2024/06/05 03:29

具体出现异常为:

Can not find a java.io.InputStream with the name [downloadFile] in the invocation stack. Check the <param name="inputName"> tag specified for this action.

据说可能是以下两种方法导致:

1.文件路径不对,根本就没有取到文件。这种情况下,可以将获得InputStream的那条语句放在system.out.println()中输出一下,若为null,那就是路径不对了,或者说得准确些就根本没有找到文件。
2.在action中没有写配置文件中"<param name="inputName">"后面属性的那个get方法.
我遇到的是第一种情况:(由于路径中出现空格)
jsp内:
    <a href="Affix_download.action?filenameInCN=<s:property value="name"/>">
 
struts:
<!-- 下载文件 -->             
   <action name="Affix_download" class="org.xidian.team8.document.DownloadAction">
 
   <result name="success" type="stream">
   <param name="contentType">application/octet-stream;charset=GBK</param>
   <param name="contentDisposition">attachment;filename="${filename}"</param>
   <param name="inputName">downloadFile</param>
   </result>
 </action>
 
Action文件:

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {
  
 private static final long serialVersionUID = 1L;
 // 下载文件原始存放路径 
 private final static String DOWNLOADFILEPATH = "/upload/";
 
 private String filenameInCN;
 private String filename;
 
 @Override
 public String execute() throws Exception {
  //System.out.println("下载文件:" + filenameInCN);
  return SUCCESS;  
 }
 
 public String getFilenameInCN() {
        return filenameInCN;
    }
 
    public void setFilenameInCN(String filenameInCN) {
       
     try {
         this.filename = new String(filenameInCN.getBytes("ISO-8859-1"), "UTF-8");
           
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    public InputStream getDownloadFile() throws Exception {
       //找到相关文件返回流
     
     String realPath  = DOWNLOADFILEPATH+filename;  
//错误路径(因为空格的问题)
     
     System.out.println("上传文件:" + filenameInCN);
     System.out.println("错误路径:" + realPath );
           
       String realPath1=realPath.replaceAll(" ", "");  
//正确路径(过滤掉错误路径中的空格)

       System.out.println("正确路径:" + realPath1 );  
     return ServletActionContext.getServletContext().getResourceAsStream(realPath1);
    }

 public String getFilename() {
      try {  
          return new String(this.filename.getBytes(), "ISO8859-1");     
      } catch (UnsupportedEncodingException e) {  
          return "获取文件名出现了错误!";  
      }  
 }
 
 public void setFilename(String filename) {
  this.filename = filename;
 }    
}

 

原创粉丝点击