当前位置: 首页 > news >正文

Spring Boot 实现文件上传和下载

文章目录

  • Spring Boot 实现文件上传和下载
    • 一、引言
    • 二、文件上传
      • 1、配置Spring Boot项目
      • 2、创建文件上传控制器
      • 3、配置文件上传大小限制
    • 三、文件下载
      • 1、创建文件下载控制器
    • 四、使用示例
      • 1、文件上传
      • 2、文件下载
    • 五、总结

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类来处理上传的文件。

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将文件流写入响应中,从而实现文件下载。

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

相关文章:

Spring Boot 实现文件上传和下载

文章目录 Spring Boot 实现文件上传和下载一、引言二、文件上传1、配置Spring Boot项目2、创建文件上传控制器3、配置文件上传大小限制 三、文件下载1、创建文件下载控制器 四、使用示例1、文件上传2、文件下载 五、总结 Spring Boot 实现文件上传和下载 一、引言 在现代Web应…...

慕课:若鱼1919的视频课程:Java秒杀系统方案优化 高性能高并发实战,启动文档

代码&#xff1a; Javahhhh/miaosha191: 运行成功了慕课若鱼1919的视频课程&#xff1a;Java秒杀系统方案优化 高性能高并发实战https://github.com/Javahhhh/miaosha191 https://github.com/Javahhhh/miaosha191 miaosha项目启动文档 需安装的配置环境&#xff1a; VMwar…...

React第二十七章(Suspense)

Suspense Suspense 是一种异步渲染机制&#xff0c;其核心理念是在组件加载或数据获取过程中&#xff0c;先展示一个占位符&#xff08;loading state&#xff09;&#xff0c;从而实现更自然流畅的用户界面更新体验。 应用场景 异步组件加载&#xff1a;通过代码分包实现组件…...

虚幻基础08:组件接口

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 作用 作用 组件接口&#xff1a;可以直接调用对方的组件接口&#xff0c;而无需转换为actor。 实现对象间的通知。 A 通知 B 做什么。...

iPhone SE(第三代) 设备详情图

目录 产品宣传图内部图——后设备详细信息 产品宣传图 内部图——后 设备详细信息 信息收集于HubWeb.cn...

2025苹果CMS v10短剧模板源码

文件不到70kb&#xff0c;加载非常快 无配置&#xff0c;没有详情页&#xff0c;上传就可以直接使用 使用教程&#xff1a;上传到网站template目录并解压、进入网站后台选择模板 注意&#xff1a;默认调用ID为1的数据和扩展分类&#xff0c;建议新建站使用 源码下载&#xf…...

2007-2020年各省国内专利申请授权量数据

2007-2020年各省国内专利申请授权量数据 1、时间&#xff1a;2007-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区名称、年份、国内专利申请授权量(项) 4、范围&#xff1a;31省 5、指标解释&#xff1a;专利是专利权的简称&…...

第一天-嵌入式应用开发介绍

首先&#xff0c;我们来介绍一下嵌入式的发展路线&#xff0c;虽然嵌入式的知识点众多&#xff0c;但是总体上来说&#xff0c;嵌入式分为以下两条主要路线&#xff1a; 单片机开发ArmLinux开发 当然&#xff0c;还有其他的一些例如FPGA这种的我们就不计算在内了&#xff0c;F…...

约瑟夫问题(信息学奥赛一本通-2037)

【题目描述】 N个人围成一圈&#xff0c;从第一个人开始报数&#xff0c;数到M的人出圈&#xff1b;再由下一个人开始报数&#xff0c;数到M 的人出圈&#xff1b;…输出依次出圈的人的编号。 【输入】 输入N和M。 【输出】 输出一行&#xff0c;依次出圈的人的编号。 【输入样…...

WPF5-x名称空间

1. x名称空间2. x名称空间内容3. x名称空间内容分类 3.1. x:Name3.2. x:Key3.3. x:Class3.4. x:TypeArguments 4. 总结 1. x名称空间 “x名称空间”的x是映射XAML名称空间时给它取的名字&#xff08;取XAML的首字母&#xff09;&#xff0c;里面的成员&#xff08;如x:Class、…...

一个python项目中的文件和目录的作用是什么?scripts,venv,predict的具体含义

今天学习SadTalker的项目&#xff0c;但目录和文件不知道都是干什么的&#xff0c;总结记录下&#xff0c;方便后续使用。 目录 1. docs: 作用: 这个文件夹通常包含项目的文档。文档可能包括用户指南、API 文档、开发文档等。 2. examples: 作用: 这里通常包含一些示例代码…...

python学opencv|读取图像(四十八)使用cv2.bitwise_xor()函数实现图像按位异或运算

【0】基础定义 按位与运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;全1取1&#xff0c;其余取0。 按位或运算&#xff1a;两个等长度二进制数上下对齐&#xff0c;有1取1&#xff0c;其余取0。 按位取反运算&#xff1a;一个二进制数&#xff0c;0变1,1变0。 按…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-block.py

block.py ultralytics\nn\modules\block.py 目录 block.py 1.所需的库和模块 2.class DFL(nn.Module): 3.class Proto(nn.Module): 4.class HGStem(nn.Module): 5.class HGBlock(nn.Module): 6.class SPP(nn.Module): 7.class SPPF(nn.Module): 8.class C1(nn…...

c++多态

1.多态的概念 通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状态。 2.多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象&#xff0c;去调用同一函数&#xff0c;产生了不同的行为…...

ResNeSt: Split-Attention Networks 参考论文

参考文献 [1] Tensorflow Efficientnet. https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet. Accessed: 2020-03-04. 中文翻译&#xff1a;[1] TensorFlow EfficientNet. https://github.com/tensorflow/tpu/tree/master/models/official/efficien…...

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法&#xff0c;我已经创建好了一个Student类&#xff0c;以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示&#xff0c;Gender为…...

从AD的原理图自动提取引脚网络的小工具

这里跟大家分享一个我自己写的小软件&#xff0c;实现从AD的原理图里自动找出网络名称和引脚的对应。存成文本方便后续做表格或是使用简单行列编辑生成引脚约束文件&#xff08;如.XDC .UCF .TCL等&#xff09;。 我们在FPGA设计中需要引脚锁定文件&#xff0c;就是指示TOP层…...

苍穹外卖使用MyBatis-Plus

系列博客目录 文章目录 系列博客目录一、修改sky-take-out项目的pom.xml文件1.修改lombok依赖的版本号2.修改spring-boot-starter-parent父工程的版本号3.增加依赖 二、修改sky-server模块的pom.xml文件1.增加mysql连接的依赖&#xff08;版本为8.0以上&#xff09;2.增加两个依…...

Baklib引领数字化内容管理转型提升企业运营效率

内容概要 在数字化迅速发展的背景下&#xff0c;企业正面临着前所未有的内容管理挑战。传统的内容管理方式已难以适应如今的信息爆炸&#xff0c;企业需要更加高效、智能的解决方案以应对复杂的数据处理需求。Baklib作为行业的先锋&#xff0c;以其创新技术对数字化内容管理进…...

【PyTorch】4.张量拼接操作

个人主页&#xff1a;Icomi 在深度学习蓬勃发展的当下&#xff0c;PyTorch 是不可或缺的工具。它作为强大的深度学习框架&#xff0c;为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&#xff0c;能够处理复杂的数据模式。通过 PyTorch&#xff0…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...