14 springboot文件下载
Posted 孤芳不自赏!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了14 springboot文件下载相关的知识,希望对你有一定的参考价值。
文件下载特别简单,给个文件路径,输出个流即可。
controller
@GetMapping(value = "/download") @IgnoreUserToken public void downLoad(String id, HttpServletResponse response){ Template template = templateBiz.selectById(id); String templatePath = template.getTemplatePath(); String templateName = template.getTemplateName(); try { //绝对路径 String targetFile = templatePath + "/" + templateName; response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition","attachment;fileName=" + FileUtils.setFileDownloadHeader(request, templateName)); FileUtils.writeBytes(targetFile, response.getOutputStream()); } catch (Exception e) { log.error("下载文件失败", e); } }
FileUtils中,对下载的文件名重新编码(setFileDownloadHeader)
/** * 下载文件名重新编码 * * @param request 请求对象 * @param fileName 文件名 * @return 编码后的文件名 */ public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException { final String agent = request.getHeader("USER-AGENT"); String filename = fileName; if (agent.contains("MSIE")) { // IE浏览器 filename = URLEncoder.encode(filename, "utf-8"); filename = filename.replace("+", " "); } else if (agent.contains("Firefox")) { // 火狐浏览器 filename = new String(fileName.getBytes(), "ISO8859-1"); } else if (agent.contains("Chrome")) { // google浏览器 filename = URLEncoder.encode(filename, "utf-8"); } else { // 其它浏览器 filename = URLEncoder.encode(filename, "utf-8"); } return filename; }
FileUtis中读取文件流(writeBytes)
/** * 输出指定文件的byte数组 * * @param filePath 文件路径 * @param os 输出流 * @return */ public static void writeBytes(String filePath, OutputStream os) throws IOException { FileInputStream fis = null; try { File file = new File(filePath); if (!file.exists()) { throw new FileNotFoundException(filePath); } fis = new FileInputStream(file); byte[] b = new byte[1024]; int length; while ((length = fis.read(b)) > 0) { os.write(b, 0, length); } } catch (IOException e) { throw e; } finally { if (os != null) { try { os.close(); } catch (IOException e1) { e1.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e1) { e1.printStackTrace(); } } } }
至此ok。
以上是关于14 springboot文件下载的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段14——Vue的axios网络请求封装
14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段
11SpringBoot-CRUD-thymeleaf公共页面元素抽取
SpringBoot启动报错“Consider defining a bean of type ‘xxx.mapper.UserMapper‘ in your configuration.“(代码片段
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段
SpringBoot中表单提交报错“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“(代码片段