首页 > 代码库 > struts2文件下载

struts2文件下载

文件下载要提供3个参数:

res          ------->要下载的文件名

resName          --------> 下载指定的文件名 

resType        ------- >下载的文件类型  ,在tomcat的web.xml 中可以找到所有文件类型对应的mime  类型

 

Action :

package henu.test;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class DownAction extends ActionSupport {    private String resName;    private String res;    private String resType;    public String getResName() {        return resName;    }    public void setResName(String resName) {        this.resName = resName;    }    public String getRes() throws UnsupportedEncodingException {        //注意 这个名字是前台制定的文件命名    resName是在配置文件中指定 的下载的文件名         //这个是原来文件的名字 传输的过程中可能乱码 前来传过来的时候可能乱码 所以此处先进行转码        return new String(res.getBytes("iso-8859-1"),"utf-8");    }    public void setRes(String res) {        this.res = res;    }    public String getResType() {        return resType;    }    public void setResType(String resType) {        this.resType = resType;    }    public InputStream getTarget() throws IOException{                //此处使用输入流打开一个文件  然后使用此方法把这个输入流返回出去                 return  new FileInputStream(ServletActionContext.getServletContext().getRealPath("/")+"/"+res);            }    @Override    public String execute() throws Exception {        //因为是继承的  所以这个方法可以不写        System.out.println(resName);        return SUCCESS;    }}

struts.xml

<action name="down" class="henu.test.DownAction">            <result type="stream">                <!-- 指定下载文件入口方法中参数的名字- -->                <param name="inputName">target</param>                <!-- 制定文件下载的类型 ,文件mine类型都在web.xml中 -->                <param name="contentType">${resType}</param>                <!-- 制定缓冲区的大小 -->                <param name="bufferSize">4096</param>                <!-- 指定下载时候的文件名 -->                <param name="contentDisposition">fileName=${resName}</param>            </result>        </action>

HTML

<!-- 可以取到上下文的路径 客户端的请求都是从上下文路径开始 下面的el表达式可以取到上下文路径  -->${pageContext.request.contextPath} <a href="${pageContext.request.contextPath}/down?res=打.doc&resName=rrrr.doc&resType=application/msword">点击下载文件</a>

 

struts2文件下载