struts.xml配置文件如下:<action name="downLoadFile" class="DownLoadFileAction">
            <result name="success" type="stream">   
                <!-- 下载文件类型定义 -->   
                <param name="contentDisposition">   
                    attachment;filename=${downloadFileName}
                </param>   
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                
                <!-- 下载文件输出流定义 -->   
                <param name="inputName">inputStream</param>   
            </result>    </action>
页面用一个超链接下载:<a href="admin/downLoadFile.action?file=<s:property value="#apply.getAttachment"/>">下载</td>                       file是从数据库中得到的文件的绝对路径
类代码:/**
 * 
 */
package com.tongtu.ttsite.action.admin;import java.io.InputStream;
import java.io.UnsupportedEncodingException;import org.apache.struts2.ServletActionContext;import com.tongtu.ttsite.action.BasicAction;/**
 * @author wql
 *
 */
public class DownLoadFileAction extends BasicAction { private String file;

private String fileName;

private InputStream inputFile;

public void setInputFile(InputStream inputFile) {
this.inputFile = inputFile;
} public String getFile() {
return file;
} public void setFile(String file) {
this.file = file;
}

 @Override
 public String execute() throws Exception {
 
        return SUCCESS;
        
    }
    
    public InputStream getInputStream(){
        
        return ServletActionContext.
                              getServletContext().getResourceAsStream("uploadFile/"+fileName);
    }
    
    public String getDownloadFileName() throws UnsupportedEncodingException{ 
       
        return new String(this.fileName.getBytes(),"ISO-8859-1");
    }
    
    public void setFileName(){
    
    
     String fname = file.substring(file.lastIndexOf("\\")+1);
     try{
    
     fname = new String(fname.getBytes("ISO-8859-1"),"gbk");
    
     }catch(Exception e){
     e.printStackTrace();
     }
     this.fileName = fname;
     System.out.println(fileName);
    }}
出错信息: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.
org.apache.struts2.dispatcher.StreamResult.doExecute(StreamResult.java:237)
org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:186)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:362)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
com.tongtu.ttsite.common.util.AuthorityInterceptor.intercept(AuthorityInterceptor.java:35)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)在线等待回应   急用啊  望高手帮忙

解决方案 »

  1.   

    inputStream这个变量在action没有定义
    把action中的代码:
    private InputStream inputFile;public void setInputFile(InputStream inputFile) {
    this.inputFile = inputFile;
    }  
    public InputStream getInputStream(){
      
    return ServletActionContext.
    getServletContext().getResourceAsStream("uploadFile/"+fileName);
    }改成:===================
    private InputStream inputStream;public void setInputStream(InputStream inputStream) {
    this.inputStream= inputStream;
    }  
    public InputStream getInputStream(){
      
    return ServletActionContext.
    getServletContext().getResourceAsStream("uploadFile/"+fileName);
    }
      

  2.   

    ServletActionContext.
    getServletContext().getResourceAsStream("uploadFile/"+fileName);这里做异常处理 基本为路径不正确 
      

  3.   

    其他的没仔细看!一看看到
    public class DownLoadFileAction extends BasicAction {private String file;//这里的file怎么是String?应该是File才对