目录

  • 搭建 `SpringBoot` 项目
    • `Maven` 依赖
    • `application.properties`
    • 前端页面
    • 后台 `Controller`

搭建 SpringBoot 项目

Maven 依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>
</dependency>

application.properties

spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.thymeleaf.cache=false
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.emode=HTML

resources/static 目录下添加一个名字为 obj.jpg 的图片

前端页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"><head><meta charset="UTF-8"><title>文件下载</title></head><body><a th:href="@{/download1?fileName=obj}">方式一:下载文件</a><br><a th:href="@{/download2?fileName=obj}"方式二:>文件</a><br><a th:href="@{/download3?fileName=application}">方式三:文件</a><br></body>
</html>

后台 Controller

@Controller
public class FileDownloadController {@GetMapping(path = "/download1")public ResponseEntity<InputStreamResource> downloadFile(String fileName) throws IOException {String filePath = "E:/Demo/src/main/resources/static/" + fileName + ".jpg";FileSystemResource fsr = new FileSystemResource(filePath);HttpHeaders headers = new HttpHeaders();headers.add("Cache-Control", "no-cache, no-store, must-revalidate");headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", fsr.getFilename()));headers.add("Pragma", "no-cache");headers.add("Expires", "0");return ResponseEntity.ok().headers(headers).contentLength(fsr.contentLength()).contentType(MediaType.parseMediaType("application/octet-stream")).body(new InputStreamResource(fsr.getInputStream()));}@GetMapping(path = "/download2")public void getDownload(@RequestParam("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) {String filePath = "E:/Demo/src/main/resources/static/" + fileName + ".jpg";File downloadFile = new File(filePath);ServletContext context = request.getServletContext();String mimeType = context.getMimeType(filePath);if (mimeType == null) {mimeType = "application/octet-stream";System.out.println("context getMimeType is null");}System.out.println("MIME type: " + mimeType);response.setContentType(mimeType);response.setContentLength((int) downloadFile.length());String headerKey = "Content-Disposition";String headerValue = String.format("attachment; filename=\"%s\"",downloadFile.getName());response.setHeader(headerKey, headerValue);try {InputStream myStream = new FileInputStream(filePath);IOUtils.copy(myStream, response.getOutputStream());response.flushBuffer();} catch (IOException e) {e.printStackTrace();}}// 下载文件到用户桌面@ResponseBody@RequestMapping(path ="/download3")public String downloadFile(String fileName, HttpServletResponse response) {if (fileName != null) {// 设置文件路径String realPath = "E:/Demo/src/main/resources/";fileName = fileName + ".yml";File file = new File(realPath, fileName);if (file.exists()) {response.setContentType("application/octet-stream");//response.setHeader("content-type", "application/octet-stream");response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名byte[] buffer = new byte[1024];FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}System.out.println("success");} catch (Exception e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}}return null;}
}

SpringBoot项目文件下载相关推荐

  1. Tekton构建Springboot项目操作手册

    Tekton构建前后端项目操作手册--本地Harbor仓库版本 概述 前端Vue项目,后端Springboot项目,后端项目使用Dubbo+Zookeeper+PostgreSQL框架. 镜像版本,本 ...

  2. springboot项目打包成exe文件

    首先需要去官网下载exe4j文件下载安装 这一步直接next 选择 JAR in EXE的选项 直接next 输入文件名称和输出路径 按图填写完之后不用着急点击下一步 需要配置兼容64位的软件配置 V ...

  3. spring-boot项目整合obs服务器-华为云

    目录 前言 1.购买服务并从官网获得我们项目所需的配置参数 1-1.登录华为云 1-2.进入控制台 1-3.创建桶 ​ ​1-4.获取sk.ak 2.spring-boot项目集成OBS服务器 2-1 ...

  4. SpringBoot中文件下载、拦截器、war包部署、jar包部署

    3. SpringBoot中文件下载 将可以被下载资源放在磁盘的 D:\springbootcodes\springboot_day6\download 路径 这里我们使用jsp开发 引入依赖使tom ...

  5. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  6. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  7. win10安装docker并结合Idea2018.1部署springboot项目

    一.准备工作 1..工具:win10,idea2018,maven3.5,jdk8 二.win10安装docker 1.win10安装docker:http://www.runoob.com/dock ...

  8. 关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源

    前言:这个是昨天晚上在部署一个项目的时候发现的,在此记录一下 关于SpringBoot项目通过jar包启动之后无法读取项目根路径静态资源 问题描述 在部署了一个项目之后,打开项目页面进行测试,发现有一 ...

  9. 使用idea创建springboot项目并打成war包发布到weblogic上...

    部署tomcat也是类似的,但是需要注意项目配置的路径,或者直接将项目放到webapp的ROOT目录下. 使用工具:intelliJ IDEA2016.3, jdk1.8 ,weblogic12 一 ...

  10. SpringBoot项目打包war部署到服务器去掉项目名所遇到的坑

    个人资源与分享网站:http://xiaocaoshare.com/ 前言 将SpringBoot项目打成war主要是方便自己后期维护,也就是每次更新网站的时候不需要打成jar包,主要是文件太大,复制 ...

最新文章

  1. sql 问号的使用 php_PHP中bindParam和bindValue的区别
  2. 大话设计模式—装饰模式
  3. TCP浅谈为什么3次握手
  4. 使用了12个月的苹果 M1 芯片,我发现了它的「致命」弱点
  5. ElasticSearch快速入门(一)介绍
  6. 第11章 递归分形树(《Python趣味创意编程》教学视频)
  7. 海明码知识透析--网工必备
  8. 面试题:React实现鼠标托转文字绕原点旋转
  9. 偏微分方程数值解的matlab程序,偏微分方程数值解法MATLAB源码
  10. scheme 微博_可用App URL Schemes
  11. 五子棋AI算法(一)
  12. Vivado SPI Flash程序下载
  13. Soul如何让年轻人的“灵魂”心甘情愿的买单?
  14. 商业变现永不眠(二) — 如何具体规划自己产品的商业化路径?
  15. 8核、6核、4核、双核CPU是什么意思
  16. [Android Traffic] android 流量计算方法
  17. char型与int的相互转化
  18. 夜来风雨声,WebSocket 知多少!
  19. 教程:Yolo5训练自己的数据集以及安装教程
  20. 计算机控制实验比例环节,陈sir-实验一 典型环节的电路模拟

热门文章

  1. Swift 5 从Model, Struct或Class转Dictionary
  2. 2021-09-1364. 最小路径和
  3. mysql 命令创建一个用户名和密码_Mysql的进入数据库指令和创建新用户密码的介绍...
  4. mysql5.7.9 zip achive
  5. Java编写网络爬虫
  6. 1.SpringDataJPA (查询:主键或其他字段、增加/修改、分页) 2021最新技术~方便快捷 博主可答疑
  7. state 全局值 设置 和获取
  8. [C#] LINQ之GroupBy
  9. 如何提高代码复用性,定义骨架?
  10. oracle10g连接自动断开,报ORA-03135错误