目录

  • 搭建 `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. luogu P2759 奇怪的函数 二分答案+数论
  2. 倍增LCA NOIP2013 货车运输
  3. 美媒:中关村取代硅谷获评全球最大科技中心
  4. 使用商业模式的九大模块去分析京东的商业模式_商业模式—筑基篇(1)
  5. COM_TEXT_TIMESTAMP_SET
  6. logback日志配置
  7. python如何读取字典的关键字_python提取字典key列表的方法
  8. springboot(三)-使用JSP
  9. 计算机辐射有那些预防措施,冰箱辐射有多大 冰箱辐射防范措施
  10. websoc是什么可以卸载吗_购房诚意金是什么意思?可以退吗?
  11. Sentinel降级_异常数_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0041
  12. 排序算法专题-插入排序
  13. 分子重构技术_4. 串珠模型重构
  14. MSP430 MSP430单片机软件开发集成环境CCS
  15. 图的遍历 (深度优先遍历和广度优先遍历)
  16. python pandas合并多个excel,Python pandas实现excel工作表合并功能详解
  17. spark-sql字段级血缘关系实现
  18. xss.haozi.me练习通关
  19. 俄罗斯最大的盗版资源网站,解封了!
  20. JS实现点击按钮图片左右切换、点击图片按钮出现下拉菜单

热门文章

  1. 自动驾驶7-4 自动驾驶汽车简介全面总结 Congratulations on Completing Course 1
  2. 机器学习- 吴恩达Andrew Ng - week3-1 Classification
  3. 算法:分离链表为两部分,小于某个值都在左边,大于等于某个值在右边 Partition List
  4. 使用案例_Excel中LOOKUP函数的使用案例
  5. 微型计算机主机作用,微型计算机的主机包括()。
  6. matlab水蒸气焓值计算_暖通干货,巧析焓湿图,焓湿图如何应用?一读就懂不容错过...
  7. python redis模块常用_python redis 模块
  8. Numpy快速入门教程
  9. 机器学习-KMeans聚类 K值以及初始类簇中心点的选取
  10. 导入es数据_有道精品课实时数据中台建设实践