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的操作(创建,合并单元格,样式修改,动态插入数据)并浏览器下载或本地导出.

热门文章

暂无图片
编程学习 ·

mysql8 windows版密码忘记如何重新设置?

本机安装位置:D:\Program Files (x86)\java\mysql-8.0.13-winx64重设密码具体过程:还好有一个navicat的连接可以打开,查看其中的用户名和主机名称(一般默认是这个,改了又忘了的话我也没办法了)打开cmd,用管理员的身份运行,先关闭mysql(net stop mysql);然后进入mysql8所…
暂无图片
编程学习 ·

几种常见的分布式事务解决方案对比

背景 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。 ACID 指数据库事务正确执行的四个基本要素: 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durabili…
暂无图片
编程学习 ·

jetson测试多个CSI摄像头(python版)

首先,CSI摄像头和USB摄像头的调用方式是不一样的。 遇到过的错误 linano@jetson-nano$:python3 mpy-Copyl.py [ WARN:0 ] qlobal /home/nvidia/host/build opencv/nv opencv/modules/videoio/src/cap qstreamer. Cpp (1757) handleMessage OpenCV | GStreamer warninq: Embedd…
暂无图片
编程学习 ·

设计模式-工厂模式

关注公众号 JavaStorm 获取更多精彩工厂模式定义 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化…
暂无图片
编程学习 ·

机器视觉打光技巧

光源专家的8个打光技巧 机器视觉系统中的照明系统是极其重要的一部分,它的好坏直接影响着后面的图像处理。在听了一位日本光源专家的讲座之前,我其实对照明并不太了解,不就是将图像照亮以至于相机能够拍到图像吗?但事实并非如此,照明远非增强图像亮度这样简单,好的照明系…
暂无图片
编程学习 ·

Linux挂载iso镜像文件作为本地yum源

1 挂载ISO文件到/mnt/cdrom下:[root@localhost]# mount -o loop /home/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom2 创建repo文件:[root@localhost /]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# mkdir bak [root@localhost yum.repos.d]# mv *.repo /etc/yum.re…
暂无图片
编程学习 ·

6台路由器ospf+rip实验

一、环境OSPF路由协议是一种典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由域是指一个自治系统(Autonomous System),即AS,它是指一组通过统一的路由政策或路由协换路由信息的网络。在这个AS中,所有的OSPF路由器都维护一个相同的描述这个A…
暂无图片
编程学习 ·

1252 奇数值单元格的数目(模拟)

1. 问题描述:给你一个 n 行 m 列的矩阵,最开始的时候,每个单元格中的值都是 0。另有一个索引数组 indices,indices[i] = [ri, ci] 中的 ri 和 ci 分别表示指定的行和列(从 0 开始编号)。你需要将每对 [ri, ci] 指定的行和列上的所有单元格的值加 1。请你在执行完所有 ind…
暂无图片
编程学习 ·

LeetCode 237. 删除链表中的节点

目录结构1.题目2.题解1.题目请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为:示例:输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那…
暂无图片
编程学习 ·

vue-element-admin(long类型转换json出现精度丢失)

官网:https://panjiachen.github.io/vue-element-admin-site/zh/guide/#%E5%8A%9F%E8%83%BD环境:vscodenode.js后台代码就是简单的基于springboot的增删改查 安装nodejs,在vscode工作空间目录命令行里安装依赖,启动 npm run dev修改框架路径:vue-admin-template-master\v…
暂无图片
编程学习 ·

Echarts3 关系图-力导向布局图 使用参数

// 基于准备好的dom,初始化ECharts实例 var myChart = echarts.init(document.getElementById(main), macarons); // 指定图表的配置项和数据var option = {tooltip : {show : true, //默认显示showContent:true, //是否显示提示框浮层trigger:item,/…
暂无图片
编程学习 ·

库存补单及销量预测

库存补单的数学模型 摘要根据顾客对商品的需求,科学合理的制定库存补单决策对于自家商店发展具有重大的影响,进而成为商家关注的热点问题。本文研究的是补单的策略问题。针对问题一,是典型的预测问题,要求我们能够准确的预测出未来五天的日销售量。由于日销售量是个非线性的…
暂无图片
编程学习 ·

VS code 设置vue文件模版

第一步,进入User Snippets 方法一: File --> Preferences --> User Snippets方法二:左下角齿轮 —> User Snippets进入设置 在User Snippets 里输入vue, 选择 vue.json (有的vscode 版本是vue),进入vue.json进行配置详细配置如下所示 {// Place your snippets for…
暂无图片
编程学习 ·

疫情地图

FeiyanMap.py import requests import json from parse import parse_url import time from pyecharts.charts import Map from pyecharts import options as opts import requests import json global data_json #
暂无图片
编程学习 ·

LeetCode题解(0929):独特的电子邮件地址(Python)

题目:原题链接(简单)解法 时间复杂度 空间复杂度 执行用时Ans 1 (Python) – O(NK)O(NK)O(NK) : K为Email平均长度 68ms (63.02%)Ans 2 (Python) O(NK)O(NK)O(NK) : K为Email平均长度 O(NK)O(NK)O(NK) : K为Email平均长度 72ms (48.14%)Ans 3 (Python)LeetCode的Python执行用…
暂无图片
编程学习 ·

Centos7安装oracle11g R2超级详细步骤

资料: https://blog.csdn.net/u013634348/article/details/53552266 转自: https://blog.csdn.net/mchdba/article/details/43086037 需要安装oracle dataguard,所以先要安装单台oracle11g,下面是单台oracle11g的详细安装过程。1,安装环境 硬件环境:2台linux虚拟机,Cent…