Java后台Controller实现文件下载操作-创新互联

代码

10余年的尼勒克网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整尼勒克建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“尼勒克网站设计”,“尼勒克网站推广”以来,每个客户项目都认真落实执行。

参数:

1.filePath:文件的绝对路径(d:\download\a.xlsx)

2.fileName(a.xlsx)

3.编码格式(GBK)

4.response、request不介绍了,从控制器传入的http对象

代码片.

//控制器
@RequestMapping(UrlConstants.BLACKLIST_TESTDOWNLOAD)
public void downLoad(String filePath, HttpServletResponse response, HttpServletRequest request) throws Exception {
    boolean is = myDownLoad("D:\\a.xlsx","a.xlsx","GBK",response,request);
    if(is)
     System.out.println("成功");
    else
    System.out.println("失败");  
}
//下载方法
public boolean myDownLoad(String filePath,String fileName, String encoding, HttpServletResponse response, HttpServletRequest request){
   File f = new File(filePath);
    if (!f.exists()) {
      try {
        response.sendError(404, "File not found!");
      } catch (IOException e) {
        e.printStackTrace();
      }
      return false;
    }

    String type = fileName.substring(fileName.lastIndexOf(".") + 1);
    //判断下载类型 xlsx 或 xls 现在只实现了xlsx、xls两个类型的文件下载
    if (type.equalsIgnoreCase("xlsx") || type.equalsIgnoreCase("xls")){
      response.setContentType("application/force-download;charset=UTF-8");
      final String userAgent = request.getHeader("USER-AGENT");
      try {
        if (StringUtils.contains(userAgent, "MSIE") || StringUtils.contains(userAgent, "Edge")) {// IE浏览器
          fileName = URLEncoder.encode(fileName, "UTF8");
        } else if (StringUtils.contains(userAgent, "Mozilla")) {// google,火狐浏览器
          fileName = new String(fileName.getBytes(), "ISO8859-1");
        } else {
          fileName = URLEncoder.encode(fileName, "UTF8");// 其他浏览器
        }
        response.setHeader("Content-disposition", "attachment; filename=" + fileName);
      } catch (UnsupportedEncodingException e) {
        logger.error(e.getMessage(), e);
        return false;
      }
      InputStream in = null;
      OutputStream out = null;
      try {

        //获取要下载的文件输入流
        in = new FileInputStream(filePath);
        int len = 0;
        //创建数据缓冲区
        byte[] buffer = new byte[1024];
        //通过response对象获取outputStream流
        out = response.getOutputStream();
        //将FileInputStream流写入到buffer缓冲区
        while((len = in.read(buffer)) > 0) {
          //使用OutputStream将缓冲区的数据输出到浏览器
          out.write(buffer,0,len);
        }
        //这一步走完,将文件传入OutputStream中后,页面就会弹出下载框

      } catch (Exception e) {
        logger.error(e.getMessage(), e);
        return false;
      } finally {
        try {
          if (out != null)
            out.close();
          if(in!=null)
            in.close();
        } catch (IOException e) {
          logger.error(e.getMessage(), e);
        }
      }
      return true;
    }else {
      logger.error("不支持的下载类型!");
      return false;
    }
  }

文章名称:Java后台Controller实现文件下载操作-创新互联
URL链接:http://cdiso.cn/article/dsigpg.html

其他资讯