开发者导航

作者:开发者导航 网址:www.codernav.com 简介:开发者常用的网址集锦。

博客园 首页 新随笔 联系 订阅 管理

下载

1. 下载是一种响应方式
  正常的响应:响应正文是html:response.getWriter().print("html");
下载的响应:
  1.一个流:字节数据:response.getOutputStream().write(文件的内容,即一些字节数据);
2.response.setContentType("image/jpeg");
3. response.setHeader("Content-disposition", "attachment;filename=xxx");

2. Struts下载
Struts2中的响应由Result来完成,所以我们需要配置一种特殊类型的<reuslt>

1). 配置<result type="stream">,其中stream说明了当前结果为下载。
2). 需要为结果配置两个头,一个流!

<param name="contentType">image/jpeg</param>
<param name="contentDisposition">attachment;filename=a.jpg</param>
<!--
结果会得到Action的类型为InputStream属性的名称!
结果得到名称之后,通过名称来调用get方法得到流对象。
-->
<param name="inputName">inputStream</param>

必须为Action提供一个InputStream类型的属性,必须提供get方法
需要给<result>配置属性名称参数,而不是流对象本身

下载附件名乱码解决

    /**
     * 下载文件时,针对不同浏览器,进行附件名的编码
     * @param filename 下载文件名
     * @param agent 客户端浏览器
     * @return 编码后的下载附件名
     * @throws IOException
     */
    public String encodeDownloadFilename(String filename, String agent) throws IOException{
        if(agent.contains("Firefox")){ // 火狐浏览器
            filename = "=?UTF-8?B?"+new BASE64Encoder().encode(filename.getBytes("utf-8"))+"?=";
        }else{ // IE及其他浏览器
            filename = URLEncoder.encode(filename,"utf-8");
        }
        return filename;
    }

 

   

posted on 2018-07-22 01:00  开发者导航  阅读(111)  评论(0编辑  收藏  举报