springboot:各种下载文件的方式

2023-05-16

文章目录

  • springboot:各种下载文件的方式
    • 一、使用response输出流下载
    • 二、使用ResponseEntity
    • 三、注意

springboot:各种下载文件的方式

一、使用response输出流下载

注意第一种方式返回值必须为void

@GetMapping("/t1")
    public void down1(HttpServletResponse response) throws Exception {
        response.reset();
        response.setContentType("application/octet-stream;charset=utf-8");
        response.setHeader(
                "Content-disposition",
                "attachment; filename=test.png");
        try(
                BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\desktop\\1.png"));
                // 输出流
                BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
        ){
            byte[] buff = new byte[1024];
            int len = 0;
            while ((len = bis.read(buff)) > 0) {
                bos.write(buff, 0, len);
            }
        }
    }

二、使用ResponseEntity

    @GetMapping("/t2")
    public ResponseEntity<InputStreamResource> down2() throws Exception {
        InputStreamResource isr = new InputStreamResource(new FileInputStream("E:\\desktop\\1.png"));
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header("Content-disposition", "attachment; filename=test1.png")
                .body(isr);
    }

    @GetMapping("/t3")
    public ResponseEntity<ByteArrayResource> down3() throws Exception {
        byte[] bytes = Files.readAllBytes(new File("E:\\desktop\\1.png").toPath());
        ByteArrayResource bar = new ByteArrayResource(bytes);
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header("Content-disposition", "attachment; filename=test2.png")
                .body(bar);
    }

三、注意

后端使用前三种的一种方式,请求方式使用非GET请求,前端使用Blob类型接收

某些情况下,在下载时需要向后端POST一些参数,这时需要前端做一定配合,将接收类型设定为Blob

@PostMapping("/t4")
    public ResponseEntity<ByteArrayResource> down4(String fileName, @RequestBody Map data) throws Exception {
        System.out.println(data);
         byte[] bytes = Files.readAllBytes(new File("E:\\desktop\\1.png").toPath());
        ByteArrayResource bar = new ByteArrayResource(bytes);
        return ResponseEntity.ok()
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .header("Content-disposition", "attachment; filename=test.png")
                .body(bar);
    }

前端代码(这里使用了原生的ajax):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
      function download() {
        var ajax = new XMLHttpRequest();
        ajax.withCredentials = true;
        ajax.responseType = "blob";
        const fileName = "ttt.txt";
        ajax.open('post','http://localhost:7901/demo/down/file/t4?fileName=' +  fileName);
        ajax.setRequestHeader("Content-Type","application/json;charset=utf-8");
        // ajax.setRequestHeader("Accept","application/json;charset=utf-8");
        ajax.send(JSON.stringify({firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"}));
        ajax.onreadystatechange = function () {
          if (ajax.readyState==4 &&ajax.status==200) {
            console.log(ajax.response);
              const href = URL.createObjectURL(ajax.response);
              const a = document.createElement('a');
              a.setAttribute('href', href);
              a.setAttribute('download', fileName);
              a.click();
              URL.revokeObjectURL(href);
          }
        }
      }
    </script>
</head>
<body>
  <input type="button" value="下载" onclick="download();"/>
</body>
</html>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot:各种下载文件的方式 的相关文章

  • k8s网络插件之Calico

    Calico简介 Calico官方文档 xff1a https projectcalico docs tigera io getting started kubernetes quickstart Calico是一套开源的网络和网络安全解决
  • ceph集群维护常用操作

    文章目录 通过套接字进行单机管理集群启停移除节点ceph配置文件存储池分类副本池IO纠删码池IO PG与PGPPG数量计算PG常见状态存储池管理创建存储池查看存储池删除存储池存储池配额 存储池可用参数存储池快照 通过套接字进行单机管理 可以
  • rbd块存储使用

    文章目录 rbd存储池镜像管理创建镜像查看镜像删除镜像镜像回收站功能镜像特性管理创建image时指定要启用的特性启用特性 xff08 针对已存在的image添加特性 xff09 禁用特性 xff08 针对已存在的image移除特性 xff0
  • 基于fo-dicom 的 Worklist & CStore 我的学习实现路线

    学习了三个周的DICOM协议 xff0c 主要进行了Worklist CStore应用测试 xff0c 下面总结一下过程中收获的心得 刚开始接触DICOM这个东西领导提出两个需求测试实现Worklist和DICOM文件下载 xff0c 后面
  • CephFs使用

    CephFS简介 官方文档 xff1a https docs ceph com en quincy cephfs CephFS即ceph filesystem xff0c 可以实现文件系统共享功能 xff08 POSIX标准 xff09 x
  • Ceph对象存储使用

    文章目录 对象存储简介RadosGW简介RadosGW配置RGW使用的存储池配置rgw使用的http端口配置rgw使用https配置rgw高可用 客户端s3cmd测试数据读写创建rgw用户安装s3cmd客户端配置s3cmd访问rgw测试数据
  • Openstack(nova)、kvm、qemu和libvirtd之间的联系

    之前一直不清楚kvm qemu libvirtd和nova组件之间的区别和联系 xff0c 今天在网上看了几篇文章 xff0c 基本搞清了这几者之间的关系 下面简单总结一下 先介绍一下这几种技术 一 xff1a QEMU QEMU是一个模拟
  • ROS py文件编译错误“ catkin_install_python() called with non-existing file”

    我遇到的有2种情况会出现这种报错 1 CMakeLists txt文件内编写错误 xff0c 仔细检查 py文件名是否写错了 catkin install python PROGRAMS scripts demo01 pub p py sc
  • 最左匹配原则的底层原理

    什么是最左匹配原则 顾名思义 xff1a 最左优先 xff0c 以最左边的为起点任何连续的索引都能匹配上 同时遇到范围查询 gt lt between like 就会停止匹配 例如 xff1a 如果建立 a b 顺序的索引 xff0c 我们
  • putty远程登录不上,并行配置不正确,两招搞定

    64 putty登录不上 xff0c 两步搞定 xff0c 亲测有效 场景 xff1a putty应用程序的并行配置不正确 方法1 xff1a Win 43 R xff0c 输入 services msc xff0c 点击确定就会弹出服务窗
  • 深度学习之python使用过程中的内存管理

    深度学习之python使用过程中的内存管理 在使用深度学习进行预测的时候 xff0c 往往会使用一些list存储生成的坐标和label以及包含识别结果的图片 xff0c 但是如果不及时清理则会造成内存爆满 xff0c 所以及时的清理多余内存
  • 【技术栈——00042】Docker网络端口指定的两种方式

    dockers在端口指定是的时候可用用以下两种形式 第一种 ip是宿主机ip xff0c port1是宿主机端口 xff0c port2是容器里的端口 port1映射到port2 参数 xff1a p ip port1 port2 第二种
  • 操作系统、数据库的默认密码

    Window xff1a 计算机管理员administrator的默认密码是空的 Linux xff1a 最高权限root xff0c 密码toor arch Linux xff1a 用户root xff0c 密码blackrch Sql
  • shell脚本--函数(函数结果赋值给数组)

    函数结果 赋予数组 一个数组可以交给函数加工之后在赋予给一个新的数组 场景 xff1a 用户获赠流量包 xff08 每人增加5G xff09 xff0c 结果运算 span class token punctuation span span
  • 最简单的引导程序

    个最简单的引导程序的写法 xff0c 功能很少 xff0c 但是我想对操作系统的初学者有一定的帮助 xff1b 它实现的功能是制作一张可引导的软盘 xff0c 软盘的实际内容则是一段程序 xff0c 则段程序在系统引导的时候在屏幕 xff1
  • ubuntu18.04 安装VMware出现gcc无法安装的问题

    在学习linux过程中需要安装VMware 而安装完成后出现报错 提示要求安装gcc 查阅资料后 ubuntu一般在安装后是自带gcc的 于是查看gcc版本 gcc v 提示没有安装gcc 尝试apt安装gcc sudo apt get i
  • vnc服务搭建及配置

    一 xff0c centos6系统 第一步 xff0c 安装VNC packages xff1a root 64 yum install tigervnc server y 第二步 xff0c 开启VNC服务 xff08 第一次开启会要求设
  • vnc之登录失败:Authentication Failure

    vnc设置正常 xff0c 密码通过vncpasswd设置过 xff0c 但是登录后总是限制认证失败 解决方法 xff1a 用户登录服务器的密码和登录vnc的密码是可以不一样的 1 首先 xff0c 通过ssh登陆用户 xff0c 输入容v
  • ftp服务之锁定用户家目录

    很多情况下 我们希望限制ftp用户只能在其主目录下 root dir 下活动 不允许他们跳出主目录之外浏览服务器上的其他目录 这时候我就需要使用到chroot local user chroot list enable chroot lis
  • 惠普暗影精灵2更新bios系统,防止电池鼓包

    https support hp com cn zh drivers selfservice omen by hp 15 ax000 laptop pc series 10862325 model 12732710 bios版本怎么看 查看

随机推荐

  • stm32直流电机控制—PID算法篇

    stm32直流电机控制 PID算法篇 一 常用的控制算法1 控制系统的基本结构 xff1a 2 常用控制算法 xff1a 位式控制 二位式控制算法 具有回差的二位式控制算法 三位式控制算法 小结 二 PID控制算法1 PID控制算法的基本思
  • ADRC例程

    ADRC 优化fhan 自抗扰控制入门 自抗扰死忠粉 ADRC H span class token macro property span class token directive keyword ifndef span ADRC H
  • 简易PID模块(C++)

    简易PID模块 源码为WR学长所写 xff0c 现发布在CSDN xff0c 作为传承 xff0c 留给学弟使用 库文件 span class token macro property span class token directive
  • 字节序的详细讲解

    字节序 1 字节序的特点2 字节序转换函数2 1 htonl函数 发 将主机字节序的IP地址 转换成网络字节序的IP地址2 2 ntohl函数 收 将网络字节序的IP地址3 3 htons函数 发 将主机字节序的端口 转换成 网络字节序的端
  • HBase java API

    1 pom lt dependency gt lt groupId gt org apache hbase lt groupId gt lt artifactId gt hbase client lt artifactId gt lt ve
  • 我用24次离职,换来6条血一样的教训

    作者丨周冲 来源丨周冲的影像声色 xff08 zhouchong2017 xff09 我是2014年毕业的 毕业之后 xff0c 以为年轻 xff0c 有的是任性资本 xff0c 也有的是发展可能 xff0c 结果频繁跳槽 xff0c 稍有
  • 2020年MathorCup高校数学建模挑战赛—大数据竞赛A题移动通信基站流量预测求解全过程文档及程序

    2020年MathorCup高校数学建模挑战赛 大数据竞赛 A题 移动通信基站流量预测 原题再现 xff1a 随着移动通信技术的发展 xff0c 4G 5G 给人们带来了极大便利 移动互联网的飞速发展 xff0c 使得移动流量呈现爆炸式增长
  • rviz导航——2D Pose estimate

    关于rviz中小车初始点的设置问题 一般有两种方法 xff1a 1打开rviz 在其上方工具栏中有2D Pose estimate xff0c 用来设置大概的初始点 2一般在amcl launch文件中也会定义初始点 xff0c 大多设为0
  • 树莓派通过MAVROS与Pixhawk/PX4通信

    1 安装ROS 2 安装MAVROS 3 配置Pixhawk 通常TELEM 2用来和机载计算机连接 xff0c 连接方式为串口转USB 通信协议为MAVLink xff0c 因此需要先使能TELM2上的MAVLink输出 v1 9 0及以
  • PX4使用Optitrack进行室内定位

    1 使用mavros连接上位机和PX4 树莓派通过MAVROS与Pixhawk PX4通信 2 PX4的设置 xff0c 将EKF估计位姿的数据来源改为VISION 使用地面站软件如QGroundControl xff0c 连接Pixhaw
  • 提高MAVROS的IMU发布频率

    提高MAVROS的IMU发布频率 Pixhawk的IMU数据可通过MAVROS获得 xff0c 相关的话题为 xff1a mavros imu data 但是MAVROS默认的IMU输出频率较低 xff0c 可能只有不到10Hz xff0c
  • 日期工具类

    日期工具类 1 span class token keyword package span span class token namespace com span class token punctuation span hl span c
  • easypoi的使用-导入校验

    easypoi导入校验 一 导入之基础校验 现在产品需要对导入的Excel进行校验 xff0c 不合法的Excel不允许入库 xff0c 需要返回具体的错误信息给前端 xff0c 提示给用户 xff0c 错误信息中需要包含行号以及对应的错误
  • springboot-日志配置

    springboot 日志配置 1 默认日志 logback 默认情况下 xff0c springboot会使用logback来记录日志 xff0c 并且使用INFO级别输出到控制台 xff0c 在运行程序的时候 xff0c 你应该看到过很
  • SpringCloud:Gateway之鉴权

    一 JWT 实现微服务鉴权 JWT一般用于实现单点登录 单点登录 xff1a 如腾讯下的游戏有很多 xff0c 包括lol xff0c 飞车等 xff0c 在qq游戏对战平台上登录一次 xff0c 然后这些不同的平台都可以直接登陆进去了 x
  • VSCode提交代码更新至github

    VSCode提交代码更新至github的步骤 在Explorer修改代码或文档转到Source control菜单 修改了代码或文档此菜单会带有修改文件数下标 先添加 stage changes xff0c 再点击 commit xff0c
  • vscode集成git

    vscode集成git 一 安装git 下载git安装包 xff0c 安装完git后配置环境变量 xff0c 在系统变量中的Path中新建 D software softwareInstall git Git cmd xff0c win 4
  • java中各种类型用Stream流求最大值最小值

    文章目录 java中各种类型用Stream流求最大值最小值一 BigDecimal 求最大值和最小值1 stream reduce 实现2 stream max 或stream min 实现 二 Integer 求最大值和最小值1 stre
  • idea:使用easyYapi插件导出yapi接口

    文章目录 idea xff1a 使用easyYapi插件导出yapi接口一 安装插件easyYapi二 配置easyYapiToken方式项目id方式 idea xff1a 使用easyYapi插件导出yapi接口 一 安装插件easyYa
  • springboot:各种下载文件的方式

    文章目录 springboot xff1a 各种下载文件的方式一 使用response输出流下载二 使用ResponseEntity三 注意 springboot xff1a 各种下载文件的方式 一 使用response输出流下载 注意第一