Java下载项目中静态文件方式
更新时间:2023年08月14日 16:33:44 作者:竹秋千道
这篇文章主要介绍了Java下载项目中静态文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Java下载项目中静态文件
废话不多说,直接上代码,拷贝即可用~~~
项目结构
下载工具类
/** * @program: myutil * @description: 从本地项目(本地磁盘上)下载静态文件 * @author: lsy * @create: 2020-08-13 16:58 **/ public class LocalFileUtils { /** * @param response * @param fileName * @description 根据指定项目路径下的某个excel, 下载文件 */ public static void exportFile(HttpServletResponse response, String fileName) { // 第一种获取静态资源 ClassPathResource classPathResource = new ClassPathResource("static/excleTemplate/" + fileName);// "static/excleTemplate/ImportModel.xlsx" // 第二种获取静态资源 // InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("static/excleTemplate/" + fileName); // 第三种获取静态资源 // InputStream inputStream = this.getClass().getResourceAsStream("static/excleTemplate/" + fileName); InputStream inputStream = null; OutputStream outputStream = null; try { inputStream = classPathResource.getInputStream(); outputStream = response.getOutputStream(); int BUFFER_SIZE = 1024 * 4; byte[] buffer = new byte[BUFFER_SIZE]; int reader = 0; while ((reader = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, reader); } response.setContentType("application/octet-stream"); response.setCharacterEncoding("utf-8"); String newFileName = URLEncoder.encode(classPathResource.getFilename(), "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + newFileName); } catch (IOException e) { e.printStackTrace(); } finally { try { if (outputStream != null) { /**flush():仅仅刷新缓冲区(一般写字符时要用,因为字符时先进入缓冲区),然后将内存中的数据立刻写出(因为缓冲区是装满之后才会写出 ,用flush()就不必等到缓冲区满,立刻写出,流对象还可以继续使用) */ outputStream.flush(); /**close():关闭流对象. 也会先刷新一次缓冲区,再关闭. 关闭之后,流对象不可以继续使用 */ outputStream.close(); inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
控制器
@ApiOperation(value = "获取resource下附件") @GetMapping(value = "/exportFile") public void exportFile(String fileName, HttpServletResponse response) { // fileName = "ImportModel.xlsx"; fileName = "labixiaoxin.jpg"; LocalFileUtils.exportFile(response, fileName); }
Java把静态资源文件下载到本地
场景
springboot项目中下载resources/static 下面的静态文件(或者本地文件)
@RequestMapping("/doLoad") public void doLoad(HttpServletRequest request, HttpServletResponse response){ String filename = "×××模版"; try { // 清空输出流 response.reset(); String resultFileName = filename + ".xlsx"; resultFileName = URLEncoder.encode(resultFileName,"UTF-8"); response.setCharacterEncoding("UTF-8"); response.setHeader("Content-disposition", "attachment; filename=" + resultFileName);// 设定输出文件头 response.setContentType("application/msexcel");// 定义输出类型 //输入流:文件路径 // 本地路径:E:\\java\\demo\\导入模板.xlsx DataInputStream in = new DataInputStream( new FileInputStream(new File("src/main/resources/static/file/导入模版.xlsx"))); //输出流 OutputStream out = response.getOutputStream(); //输出文件 int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } out.close(); in.close(); } catch (Exception e) { e.printStackTrace(); // 清空输出流 response.reset(); } }
效果:
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
slf4j jcl jul log4j1 log4j2 logback各组件系统日志切换
这篇文章主要介绍了slf4j、jcl、jul、log4j1、log4j2、logback的大总结,各个组件的jar包以及目前系统日志需要切换实现方式的方法,有需要的朋友可以借鉴参考下2022-03-03Mybatis代码生成器Mybatis Generator(MBG)实战详解
本文我们主要实战Mybatis官方的代码生成器:Mybatis Generator(MBG),掌握它以后,可以简化大部分手写代码,我们只需要写复杂逻辑代码,需要的朋友可以参考下2023-05-05Java反射 PropertyDescriptor类案例详解
这篇文章主要介绍了Java反射 PropertyDescriptor类案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-08-08JAVA简单链接Oracle数据库 注册和登陆功能的实现代码
这篇文章主要介绍了JAVA链接Oracle并实现注册与登录功能的代码实例,有需要的朋友可以参考一下2014-01-01
最新评论