jsp页面如下设置:
<body>
<a href="myuser/UserAction">点击下载</a>
</body>
随后在Action里面定义方法
public InputStream getDownloadFile() throws Exception{
System.out.println(666);
this.fileName ="1.jpg";
return ServletActionContext.getServletContext().getResourceAsStream("/upload/1.jpg");
}
注意:这里返回类型是InputStream
同时方法名取值为get**()与下面struts.xml相对应
struts.xml做如下设置:
<action name="UserAction" class="com.action.UserAction" >
<result name="success" type="stream">
<param name="contentType"> image/jpeg</param>
<param name="contentDisposition" > attachment ;fileName="${fileName}" </param>
<param name="inputName">downloadFile</param>
<param name="bufferSize" >1024</param>
</result>
</action>
注意:这里的结果类型必须是type="stream"
<param name="contentDisposition" > attachment ;fileName="${fileName}" </param>
这里的contentPosition默认是inline,即内联样式,具体实现方式是:如果能在网页打开,就在网页打开,否则将会自己选择。
attachment:下载时会打开下载框。fileName="${fileName}动态显示文件名。
<param name="inputName" > downloadFile</param>这里的文件名必须与Action里面 get**()方法保持一致。否则会报
java.io.FileInputStream cannot be cast to java.lang.String这个错误