zoukankan      html  css  js  c++  java
  • struts2框架之文件下载(参考第三天学习笔记)

    下载

    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;
        }

       

  • 相关阅读:
    Neural Collaborative Filtering 神经网络协同过滤
    pyspark(一) 常用的转换操作
    HO引擎近况20210315
    LeetCode–前 K 个高频元素
    常用十大算法(七)— 克鲁斯卡尔算法
    常用十大算法(六)— 普里姆算法
    LeetCode–数值的整数次方
    LeetCode–二叉树的层次遍历 II
    常用十大算法(五)— 贪心算法
    LeetCode–二进制中1的个数
  • 原文地址:https://www.cnblogs.com/xyhero/p/9348788.html
Copyright © 2011-2022 走看看