• ssm下载文件


    ## 前台页面

    文件下载只需要在前端页面,(解决了中文文件名不能传输)
    跳到对应的controller, 参数跟上文件名fileName

    <a href="/ssm_kgc/fileDownload?fileName=宏宏.jpg">下载</a>


    ## 后台java代码

    /**
    * 文件下载,只需要传入对应文件名字
    */
    @RequestMapping("/fileDownload")
    public void fileDownload(
    @RequestParam(value = "fileName",required = false)String fileName,
    HttpServletRequest req,
    HttpServletResponse resp,
    HttpSession session) throws Exception {

    /*******************1.接收请求参数***********************************/
    //获取文件名,接收文件名参数

    /*******************2.对接收的参数进行编码处理**************************/
    /**因为使用的是UTF-8的编码形式,所以不需要进行转码**/
    //获取参数 ,默认会对参数进行编码 ISO8859-1
    //把乱码转回二进制位
    // byte[] bytes = name.getBytes("ISO8859-1");
    //再去使用UTF-8进行编码
    // name = new String(name.getBytes(),"UTF-8");

    /*******************3.告诉浏览器响应的文件的类型*************************/
    // 根据文件名来获取mime类型
    String mimeType = session.getServletContext().getMimeType(fileName);
    // 设置 mimeType
    resp.setContentType(mimeType);

    /*******************4.告诉浏览器以附件的形式下载*************************/
    // 获取客户端信息
    String agent = req.getHeader("User-Agent");
    // 定义一个变量记录编码之后的名字
    String filenameEncoder = "";
    if (agent.contains("MSIE")) {
    // IE编码
    filenameEncoder = URLEncoder.encode(fileName, "utf-8");
    filenameEncoder = filenameEncoder.replace("+", " ");
    } else if (agent.contains("Firefox")) {
    // 火狐编码
    BASE64Encoder base64Encoder = new BASE64Encoder();
    filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(fileName.getBytes("utf-8")) + "?=";
    } else {
    // 浏览器编码
    filenameEncoder = URLEncoder.encode(fileName, "utf-8");
    }
    // 告诉浏览器是以附件形式来下载 不要解析
    resp.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);

    /*******************5.输出对应的流*************************/
    //获取文件的绝对路径,拼接文件的路径
    String path = session.getServletContext().getRealPath("download/" + fileName);

    System.out.println("下载文件的路径" + path);
    //写入流中
    FileInputStream is = new FileInputStream(path);
    //获取相应的输出流
    ServletOutputStream os = resp.getOutputStream();
    byte[] b = new byte[1024];
    int len;
    //写入浏览器中
    while((len = is.read(b)) != -1){
    os.write(b, 0, len);
    }
    //关闭对应的流
    os.close();
    is.close();
    }

  • 相关阅读:
    IIC时序和24C02读写字节时序
    Labview-vi的可重入性
    Labview笔记-创建自定义控件
    非院校科研机构如何查阅下载文献?
    【转】经典的图像去噪算法NLM和BM3D算法
    【转载】计算机科学最重要的32个算法
    图像存储方式
    二维物体形状识别方法比较
    论static关键词
    论引用
  • 原文地址:https://www.cnblogs.com/xwd2366846227/p/11187993.html
Copyright © 2020-2023  润新知