Struts2文件下载(版本更新)

12 篇文章 0 订阅

虽然通过超链的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实现,在此不作介绍了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值