Struts2 下载的一些配置

(一)简单控制下载

fileDown.html

<a href="download.action">下载压缩文件</a>          

struts.xml

    <constant name="struts.i18n.encoding" value="GBK"/>
    <package name="upload" extends="struts-default">
        <action name="upload" class="jCuckoo.UploadAction">
            <interceptor-ref name="fileUpload"> 
                <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param> 
                <param name="maximumSize">20000</param> 
            </interceptor-ref> 
            <interceptor-ref name="defaultStack"/>   
            <!-- 保存路径savePath依赖注入 -->         
            <param name="savePath">/upload</param>
            <result name="input"> /upload.jsp</result> 
            <result>/succ.jsp</result>  
        </action>

         <action name="download" class="jCuckoo.FileDownloadAction">
            <result name="success" type="stream">
                <param name="contentType">application/zip</param>
                <param name="inputName">targetFile</param>
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
                <param name="bufferSize">4096</param>
            </result>
        </action>
    </package>
这个action特殊的地方在于result的类型是一个流(stream),配置stream类型的结果时,因为无需指定实际的显示的物理资源,所以无需指定location属性,只需要指定inputName属性,该属性指向被下载文件的来源,对应着Action类中的某个属性,类型为InputStream。下面则列出了和下载有关的一些参数列表:
参数说明

contentType

内容类型,和MIME标准中的规定一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片

inputName

下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取属性inputStream需要提供getInputStream()方法

contentDisposition

文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。
attachment;filename="XXX.XXX",表示文件下载的时候保存的名字应为XXX.XXX。如果直接写filename="XXX.XXX",那么默认情况是代表inline,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="XXX.XXX"

bufferSize

下载缓冲区的大小。
在这里面,contentType属性和contentDisposition分别对应着HTTP响应中的头Content-Type和Content-disposition头。

FileDownloadAction.java

public class FileDownloadAction implements Action {
    private String inputPath = //images//中.zip;   //可以通过查找数据库获取
    public void setInputPath(String inputPath) {
        this.inputPath = inputPath;
    }

    /** 提供转换编码后的供下载用的文件名 */
    public String getDownloadFileName() throws UnsupportedEncodingException {
        String downFileName = null;
        int i = inputPath.lastIndexOf('//');
        downFileName = inputPath.substring(i + 1);
        downFileName = new String(downFileName.getBytes(), "ISO8859-1");
        return downFileName;
    }

    /*
     * 下载用的Action应该返回一个InputStream实例, 该方法对应在result里的inputName属性值为targetFile
     */
    public InputStream getTargetFile() throws Exception {
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }
    public String execute() throws Exception {
        return SUCCESS;
    }
}
(二)如果要实现下载授权控制
只需要将上面的execute()进行简单修改即可

    public String execute() throws Exception
    {
        ActionContext ctx = ActionContext.getContext();
        Map session = ctx.getSession();
        String user = (String)session.get("jCuckoo");
        if ( user !=  null && user.equals("admin"))
        {
            return SUCCESS;
        }
        ctx.put("tip" , "您还没有登陆,或者登陆的用户名不正确,请重新登陆!");
        return LOGIN;
    }
对应的struts.xml修改成

         <action name="download" class="jCuckoo.FileDownloadAction">
            <result name="success" type="stream">
                <param name="contentType">application/zip</param>
                <param name="inputName">targetFile</param>
                <param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
                <param name="bufferSize">4096</param>
            </result>
            <result name="login">/input.jsp</result>
        </action>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值