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实现文件下载操作-创新互联
链接地址:http://scyanting.com/article/dsigpg.html