Java实现文件浏览器下载

前言:先说下需求,项目需求是用户一点击一个前端页面的链接就可以下载一个压缩包.因为就1个文件,使用文件管理系统像fastDSF,阿里云的OSS这种没必要,直接放在nginx服务器上的怕不好管理,于是给我限定了把文件打包到部署时候的jar包中并实现浏览器下载.

废话不多说,直接上代码!

1.首先是建立一个文件夹存放需要打包的文件,这里我选择的是和src同路径创建一个files,把文件放入文件夹内.
在这里插入图片描述
2.修改pom.xml配置,实现打包时将文件打包到\target\classes\这个目录下,

     <!--pom.xml里直接添加这段就可以把文件打包到\target\classes\目录了,代码能看懂把,要学会灵活运用,里面几个参数根据需要自己改-->
        <resources>
            <resource>
                <directory>files</directory>
                <includes>
                    <include>/*.zip</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

打包后效果
在这里插入图片描述
3.接下来就是功能实现,很简单,在controller里面实现即可

    @GetMapping("download-template")
    public Result downloadTemplate(HttpServletResponse response) throws IOException {
        ApplicationHome ah = new ApplicationHome(getClass());
        File files = ah.getSource();//这里获取到的是\target\classes\路径创建的File
        File file=new File(files,"导入模板.zip");//这里就是文件的绝对路径创建的File
        System.out.println(file.getParentFile().toString());

        response.setContentType("application/msword");//msword可以随便设置,别和当前项目别的下载冲突接口
        response.setCharacterEncoding("UTF-8");
        String encode = URLEncoder.encode("导入模板", "UTF-8");//这是文件名,这样处理是解决乱码
        response.addHeader("Content-Disposition", "attachment;filename=\"" + encode +".zip" +"\"");
        response.flushBuffer();
        OutputStream outputStream = response.getOutputStream();

        //输出文件
        InputStream inputStream  = new FileInputStream(file);
        IOUtils.copy(inputStream, outputStream);
        //关闭流
        IOUtils.closeQuietly(inputStream);
        IOUtils.closeQuietly(outputStream);

        return Result.success("下载成功");
    }

最后:如果对你有帮助,可以随手点个赞哈,让我看到,我就有动力写的详细点,要不我就直接复制代码做个记录留我自己看就行了哈.
传送门,这里有关于创建临时文件,代码写入修改临时文件内容,最终把临时文件浏览器下载的写法,感兴趣的可以点击这里链接: Aspose.Words for Java实现Word的操作(创建,合并单元格,样式修改,动态插入数据)并浏览器下载或本地导出.

热门文章

暂无图片
编程学习 ·

8080端口被占怎么办 ,解决方法

用后端springboot启动,8080端口 报错 8080 in use 打开 控制台 win+R 输入 cmd 进入后输入netstat -ano 肉眼能找到找就完事了如果找不到 输入netstat -aon|findstr “8080”找到最后一列的那个数字 “26252”, 就是PID 码 然后打开系统的 任务管理器 ,你要是任务管理器都不…
暂无图片
编程学习 ·

[UML] 类图之间的关系 | 3.泛化关系

[UML] 类图之间的关系 | 3.泛化关系 3.泛化关系泛化(Generalization)关系也就是**继承关系**,用于描述父类与子类之间的关系,父类又称为基类或超类,子类又称为派生类 在UML中,泛化关系用带空心三角形的直线来表示 在代码实现时,使用面向对象的继承机制来实现泛化关系,在J…
暂无图片
编程学习 ·

Java多线程编程复习总结(一)

Java中多线程概述 一、基本概念 进程和线程进程是程序运行的实例,比如Java程序就是一个Java虚拟机进程 每个进程中可以包含多个线程,每个线程完成各自不同的任务,在Java平台中一个线程对应一个对象但是这个对象和普通类中声明的对象不一样,不是分配在对空间中的;而是,JVM…
暂无图片
编程学习 ·

粗糙的量刑模型-随机森林算法

粗糙的刑事量刑模型-随机森林算法一、效果(一)特征重要性(二)预测精度(三)结果二、大致思路(一)数据爬取(二)数据处理1、解压缩2、去重3、格式转换4、文件移动5、法条分割为匹配的数据集6、选择罪名和法定刑7、选择量刑情节8、加重构成要件的去除9、模糊匹配相应数据…
暂无图片
编程学习 ·

一文详解 Ansible 的自动化运维

一、Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误。 Ansible 通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个。更为重要的是,它操作非常简单,即使小白…
暂无图片
编程学习 ·

SQL存储过程

什么是存储过程,如何创建一个存储过程 * Stored Procedure * 存储过程=SQL语句+流控制语句定义存储过程定义 create procedure 存储过程名称(【参数列表】) begin 需要执行的语句 end. 创建CREATE PROCEDURE `get_hero_scores`( OUT max_max_hp FLOAT, OUT min_max_mp FLO…
暂无图片
编程学习 ·

“百度大脑EasyDL经典版”拍了拍你,真实的产业应用get了吗?

在现有业务或方案的基础上,企业如何通过引入AI能力真正做到在降低成本的同时提升效率?质检流水线中,检测人员注意力与体力不支导致的低效、价格高昂的智能检测设备、千变万化的瑕疵形态都迫使企业投入更多成本;电网户外巡检中,越来越密集的电网分布、安全指标提升带来的巡…
暂无图片
编程学习 ·

程序员:Java数据结构与算法——第十六章·算法设计技术详解

Java数据结构与算法-第十六章算法设计16.1引言在求解一个新问题时,通常的思路是寻找当前问题与已解决问题之间的相似之处,从而轻松找到新问题的求解方法。本章将对各种算法按照不同的方法进行分类,然后在随后的3章中分别介绍3个算法设计思想(即贪婪、分治和动态规划)。16.2分…
暂无图片
编程学习 ·

堪称零瑕疵!仅用了330页直接封神,我要吹爆这份RocketMQ笔记

RocketMQ天生为金融互联网领域而生,追求高可靠、高可用、高并发、低延迟 RocketMQ在阿里集团也被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景 其主要功能有:灵活可扩展性、 海量消息堆积能力、 能够保证严格的消息顺序 提供丰富的消息拉…
暂无图片
编程学习 ·

项目实训——初版的页面优化(2)

项目实训——初版的页面优化(2)题目太长的解决就业帮助具体内容的收起展开表格的美化 再次进行了一次小组会议,找到了更加多的需要优化和完善的地方。比如题目很容易出框,讨论区话题的显示需要限制长度等等。同时也新增一些功能,比如评论的删除。这篇先写完善。 题目太长的…
暂无图片
编程学习 ·

Leetcode刷题链表预备知识(C)

Leetcode里的head指针指向实实在在的链表第一个结点,该结点不是哨兵结点。 对链表处理完之后,链表成为空链表,则head指针赋值NULL。 写代码的时候,不要写出p->next->next这种东西,因为如果p->next==NULL,那程序运行就报错了。 用指针的时候,一定要判其是否为NU…
暂无图片
编程学习 ·

你想要的Python面试题都在这里了!

第三部分 数据库和缓存(46题) 1. 列举常见的关系型数据库和非关系型都有那些? 关系型数据库: Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL 非关系型数据库: NoSql、Cloudant、MongoDb、Redis、HBase 2. MySQL常见数据库引擎及比较? 在实际工作中,选择一…
暂无图片
编程学习 ·

RocketMQ消费者之消息消费过程分析

心跳机制在Consumer启动后,它就会通过定时任务不断地向RocketMQ集群中的所有Broker实例发送心跳包心跳包内容包含了消息消费分组名称订阅关系集合消息通信模式客户端id的值Broker端在收到Consumer的心跳消息后,会将它维护在ConsumerManager的本地缓存变量—consumerTable,同…
暂无图片
编程学习 ·

算法笔记:字符串哈希初步

问题描述: 给出N个字符串,每个字符串由三位大写字母组成,再给出M个查询字符串,问每个查询字符串在N个字符串中出现的次数? 解题思路: 把字符串转化为整数,利用空间来换时间效率。 C/C++代码: #include<cstdio> #include<cstring> const int maxn=100; char…
暂无图片
编程学习 ·

OpenCV学习笔记(一):opencv安装,边缘提取

OpenCV学习笔记(C++,win10+OpenCV4.1.2+VS2017) 记录了本人在图像处理相关学习过程中对opencv的使用心得,主要是供自己复习,但如果碰巧为你解决了问题,那就更好了。 由于本博客写作目的是用于复习,故顺序依照本人学习过程来进行编写。 如有错误,欢迎指正。 一、OpenCV的…
暂无图片
编程学习 ·

十亿级数据ES搜索怎么优化?

面试题es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?面试官心理分析这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么…