Struts2文件下载(版本更新)

来源:互联网 发布:linux 模糊搜索文件 编辑:程序博客网 时间:2024/05/22 20:50

虽然通过超链的href属性直接指定要下载的资源也可以实现文件下载,但遇到中文文件名、下载前的权限检查这些问题,超链都处理不了,还得Struts2来进行文件下载。采用Struts2提供的stream结果类型来支持文件下载。在stream结果类型的结果中需指定一个inputName参数,参数值指定了一个文件下载入口的输入流。废话不多说,下面分步介绍Struts2支持文件下载的过程:
1、创建一个文件下载的action,比普通action多一个返回InputStream的方法;

package com.gmi.client;import java.io.InputStream;import java.io.UnsupportedEncodingException;import org.apache.struts2.ServletActionContext;public class FileDownloadAction extends BaseAction {    /**     * @author xiaoxin_tang     */    private static final long serialVersionUID = 1L;    private String inputPath;    private String contentType;    private String downFileName;    public String getInputPath() {        return inputPath;    }    public void setInputPath(String inputPath) {        try {            this.inputPath = new String(inputPath.getBytes("iso-8859-1"),"gbk");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public String getContentType() {        return contentType;    }    public void setContentType(String contentType) {        this.contentType = contentType;    }    public String getDownFileName() {        return downFileName;    }    public void setDownFileName(String downFileName) {        try {            this.downFileName = new String(downFileName.getBytes("iso-8859-1"),"gbk");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }    public InputStream getTargetFile(){        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);    }    public String execute() throws Exception {        return SUCCESS;    }}

其中inputPath,contentType,downFileName分别表示文件路径(待下载文件),文件类型,文件名。
2、配置action

    <action name="download" class="com.gmi.client.FileDownloadAction">            <param name="inputPath">download/WebPlugin.exe</param>            <result name="success" type="stream">                <param name="contentType">${contentType}</param>                <param name="inputName">targetFile</param>                <param                name="contentDisposition">attachment;fileName="WebPlugin.exe"                </param>                <param name="bufferSize">51200</param>            </result>        </action>

最重要的是配置一个stream类型的结果,结果中的四个参数contentType,inputName,contentDisposition,bufferSize值分别是文件类型(可省.),文件下载入口的输入流(不可缺),下载后的文件名(不可省),文件大小控制(可省,一般设置大一点就行)。此外,action还需要携带一个参数inputPath,表示带下载文件的路径(相对或绝对)。
在jsp页面添加一个超链,href=“文件下载action”。至此,Struts2至此文件下载就完成了!!!
这里写图片描述这里写图片描述
文件下载最常应用场景就是软件自动更新,用户权限下载等,此时可根据需求,在action的execute方法返回SUCCESS之前进行权限控制,版本控制等,也可用ajax实现,在此不作介绍了!

0 0
原创粉丝点击