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();
        }
    }

效果:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Cloud Ribbon实现客户端负载均衡的方法

    Spring Cloud Ribbon实现客户端负载均衡的方法

    本篇文章主要介绍了Spring Cloud Ribbon实现客户端负载均衡的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 详解SpringBoot如何优雅的进行全局异常处理

    详解SpringBoot如何优雅的进行全局异常处理

    在SpringBoot的开发中,为了提高程序运行的鲁棒性,我们经常需要对各种程序异常进行处理,但是如果在每个出异常的地方进行单独处理的话,这会引入大量业务不相关的异常处理代码,这篇文章带大家了解一下如何优雅的进行全局异常处理
    2023-07-07
  • Java中反射reflect的基础知识讲解

    Java中反射reflect的基础知识讲解

    这篇文章主要介绍了Java中反射reflect的基础知识讲解,Java中的反射,它算是Java当中非常底层的一个技术,平时我们我们用得不多,实际上它也的确非常复杂同时也难以理解,但是涉及到底层的东西Java都给我们封装好了,我们直接拿来调用即可,需要的朋友可以参考下
    2023-10-10
  • dubbo如何设置连接zookeeper权限

    dubbo如何设置连接zookeeper权限

    这篇文章主要介绍了dubbo如何设置连接zookeeper权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Spring Boot 实现 IP 限流(保障系统稳定性的关键技术)

    Spring Boot 实现 IP 限流(保障系统稳定性的关键技术)

    在Spring Boot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文通过实例代码讲解Spring Boot实现IP限流的相关操作,感兴趣的朋友一起看看吧
    2025-06-06
  • SpringBoot自定义Starter及使用

    SpringBoot自定义Starter及使用

    这篇文章主要介绍了SpringBoot自定义Starter及使用,Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境进行自动配置,需要的朋友可以参考下
    2023-07-07
  • SpringBoot集成内存数据库Derby的实践

    SpringBoot集成内存数据库Derby的实践

    像H2、hsqldb、derby、sqlite这样的内存数据库,小巧可爱,做小型服务端演示程序,非常好用。最大特点就是不需要你另外安装一个数据库。本文主要介绍了SpringBoot集成内存数据库Derby,感兴趣的可以了解一下
    2021-09-09
  • Java特性 Lambda 表达式和函数式接口

    Java特性 Lambda 表达式和函数式接口

    这篇文章主要介绍了Java特性 Lambda 表达式和函数式接口,Lambda表达式基于函数式编程思想,也可以称为闭包,是Java 8引入的重要新特性, Lambda允许把函数作为一个方法的参数
    2022-06-06
  • IDEA常用配置之类Tab页多行显示方式

    IDEA常用配置之类Tab页多行显示方式

    这篇文章主要介绍了IDEA常用配置之类Tab页多行显示方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • 深入了解Java包与访问控制权限

    深入了解Java包与访问控制权限

    这篇文章主要带你掌握Java中包的定义及使用以及Java中的4种访问权限,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-09-09

最新评论