Spring Boot 实现文件上传和下载

server/2025/2/1 9:48:31/

文章目录

Spring Boot 实现文件上传和下载

在这里插入图片描述

一、引言

在现代Web应用中,文件上传和下载是非常常见的功能。无论是用户上传头像、文档,还是下载资源文件,这些操作都需要后端提供支持。Spring Boot 作为目前最流行的Java框架之一,提供了简洁而强大的方式来实现文件的上传和下载功能。本文将详细介绍如何在Spring Boot中实现文件的上传和下载,并提供相应的代码示例。

二、文件上传

1、配置Spring Boot项目

首先,确保你的Spring Boot项目已经配置了spring-boot-starter-web依赖。这个依赖包含了Spring MVC,它是实现文件上传和下载的核心。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、创建文件上传控制器

接下来,我们需要创建一个控制器来处理文件上传的请求。Spring Boot 提供了MultipartFile类来处理上传的文件。

java">import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;@RestController
public class FileUploadController {@PostMapping("/upload")public String handleFileUpload(@RequestParam("file") MultipartFile file) {if (file.isEmpty()) {return "文件为空,请重新选择文件";}try {// 获取文件名String fileName = file.getOriginalFilename();// 设置文件存储路径String filePath = "/path/to/upload/" + fileName;// 将文件保存到指定路径file.transferTo(new File(filePath));return "文件上传成功: " + fileName;} catch (IOException e) {e.printStackTrace();return "文件上传失败";}}
}

在这个示例中,我们通过@RequestParam("file")注解来接收前端上传的文件,并将其保存到指定的路径中。

3、配置文件上传大小限制

默认情况下,Spring Boot 对上传文件的大小有限制。如果你需要上传大文件,可以在application.properties中配置以下属性:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

三、文件下载

1、创建文件下载控制器

文件下载的实现相对简单。我们可以通过HttpServletResponse将文件流写入响应中,从而实现文件下载。

java">import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;@RestController
public class FileDownloadController {@GetMapping("/download")public void downloadFile(@RequestParam("filename") String filename, HttpServletResponse response) {File file = new File("/path/to/upload/" + filename);if (file.exists()) {response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=" + filename);byte[] buffer = new byte[1024];try (FileInputStream fis = new FileInputStream(file);OutputStream os = response.getOutputStream()) {int len;while ((len = fis.read(buffer)) != -1) {os.write(buffer, 0, len);}os.flush();} catch (IOException e) {e.printStackTrace();}} else {response.setStatus(HttpServletResponse.SC_NOT_FOUND);}}
}

在这个示例中,我们通过HttpServletResponse将文件流写入响应中,并设置响应头以触发文件下载。

四、使用示例

1、文件上传

你可以使用Postman或任何HTTP客户端工具来测试文件上传功能。发送一个POST请求到/upload接口,并在请求体中包含一个文件。

2、文件下载

对于文件下载,你可以直接在浏览器中访问/download?filename=yourfile.txt,浏览器会自动触发文件下载。

五、总结

通过本文的介绍,你已经学会了如何在Spring Boot中实现文件的上传和下载功能。文件上传通过MultipartFile类处理,而文件下载则通过HttpServletResponse实现。这些功能在大多数Web应用中都非常实用,希望本文能帮助你更好地理解和应用这些技术。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • Spring Boot File Upload Example
  • Spring Boot File Download Example

http://www.ppmy.cn/server/164034.html

相关文章

GEE | 植被总初级生产力GPP的时间变化特征

同学们好&#xff0c;这期我们分享的是植被总初级生产力GPP的日、月、生长季和年变化趋势代码。我们选用的数据集是MODIS/061/MOD17A2HGF&#xff0c;该产品时间跨度为2000-至今&#xff0c;空间分辨率500米&#xff0c;时间分辨率8天。 其中我们把生长季时间设置为了5-9月份&…

【Node.js】Koa2 整合接口文档

部分学习来源&#xff1a;https://blog.csdn.net/qq_38734862/article/details/107715579 依赖 // koa2-swagger-ui UI视图组件 swagger-jsdoc 识别写的 /***/ 转 json npm install koa2-swagger-ui swagger-jsdoc --save配置 config\swaggerConfig.js const Router requir…

【Redis】List 类型的介绍和常用命令

1. 介绍 Redis 中的 list 相当于顺序表&#xff0c;并且内部更接近于“双端队列”&#xff0c;所以也支持头插和尾插的操作&#xff0c;可以当做队列或者栈来使用&#xff0c;同时也存在下标的概念&#xff0c;不过和 Java 中的下标不同&#xff0c;Redis 支持负数下标&#x…

计算机网络 (61)移动IP

前言 移动IP&#xff08;Mobile IP&#xff09;是由Internet工程任务小组&#xff08;Internet Engineering Task Force&#xff0c;IETF&#xff09;提出的一个协议&#xff0c;旨在解决移动设备在不同网络间切换时的通信问题&#xff0c;确保移动设备可以在离开原有网络或子网…

react项目表格内容轮播,DataV-React轮播表的使用

项目中想要实现表格表头固定不动&#xff0c;表格行内容轮播呈现的效果&#xff0c;antd中的table无法实现&#xff0c;使用DataV-React轮播表来实现。 官网地址&#xff1a;介绍 | DataV-React 轮播表 | DataV-React 1. 安装 npm 安装 npm install jiaminghi/data-view-r…

JVM_类的加载、链接、初始化、卸载、主动使用、被动使用

①. 说说类加载分几步&#xff1f; ①. 按照Java虚拟机规范,从class文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下7个阶段: 第一过程的加载(loading)也称为装载验证、准备、解析3个部分统称为链接(Linking)在Java中数据类型分为基本数据类型和引用数据…

“大模型横扫千军”背后的大数据挖掘--浅谈MapReduce

文章目录 O 背景知识1 数据挖掘2 邦费罗尼原则3 TF.IDF4 哈希函数5 分布式文件系统 一、MapReduce基本介绍1. Map 任务2. 按键分组3. Reduce 任务4. 节点失效处理5.小测验&#xff1a;在一个大型语料库上有100个map任务和若干reduce任务&#xff1a; 二、基于MapReduce的基本运…

Canny 边缘检测

步骤 1.降噪 应用高斯滤波器&#xff0c;以平滑图像&#xff0c;滤除噪声。 边缘检测易受噪声影响&#xff0c;所以使用高斯滤波器平滑图像&#xff0c;降低噪声。 2.梯度 计算图像中每个像素点的梯度大小和方向。 计算大小 Sobel算子是一种常用的边缘检测滤波器&#xff…