1.FileServiceImpl.java
/** * 下载文件 * * @param address * @param response * @throws IOException */ @Override public void downloadFile(String address, HttpServletResponse response) throws IOException { if (address.contains("%")) { try { address = URLDecoder.decode(address, "UTF-8"); } catch (UnsupportedEncodingException e) { throw new CyException("文件路径有误"); } } ServletOutputStream out = null; FileInputStream in = null; try { in = new FileInputStream(new File(address)); String[] dir = address.split("/"); String fileName = dir[dir.length - 1]; // 设置响应类型为html,编码为utf-8,处理相应页面文本显示的乱码 response.setContentType("application/octet-stream"); // 设置文件头:最后一个参数是设置下载文件名 response.setHeader("Content-disposition", "attachment;filename=" + fileName); out = response.getOutputStream(); // 读取文件流 int len = 0; byte[] buffer = new byte[1024 * 10]; while ((len = in.read(buffer)) != -1) { out.write(buffer, 0, len); } out.flush(); } catch (FileNotFoundException e) { throw new CyException("文件路径有误"); } finally { response.flushBuffer(); try { out.close(); in.close(); } catch (NullPointerException e) { throw new CyException("responseFileStream stream close() error:NullPointerException" + e.toString()); } catch (Exception e) { throw new CyException("responseFileStream stream close() error:" + e.toString()); } } }
2.FileController.java
@RequestMapping(value = "/downloadFile", method = RequestMethod.GET) @ResponseBody @Validated public void downloadFile(@NotBlank @RequestParam(value = "address") String address, HttpServletResponse response) throws IOException { fileService.downloadFile(address, response); }
转自:https://www.cnblogs.com/xian-yu/p/13267312.html