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

Spring Boot 2.x基础教程:实现文件上传

 ​

博客主页:     南来_北往

系列专栏:Spring Boot实战


前言

文件上传的功能实现是我们做Web应用时候最为常见的应用场景,比如:实现头像的上传,Excel文件数据的导入等功能,都需要我们先实现文件的上传,然后再做图片的裁剪,excel数据的解析入库等后续操作。

今天通过这篇文章,我们就来一起学习一下如何在Spring Boot中实现文件的上传。

实战

 1、首先,在项目的pom.xml文件中添加必要的依赖项。对于文件上传功能,通常需要使用spring-boot-starter-webcommons-fileupload依赖。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>
</dependencies>

2、在application.properties或application.yml文件中配置文件上传的相关属性,例如最大文件大小限制、临时文件夹路径等。

spring:servlet:multipart:max-file-size: 10MBmax-request-size: 10MB

3、创建一个用于处理文件上传请求的控制器类。在该类中,定义一个处理POST请求的方法,并使用@RequestParam注解来接收上传的文件。

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 "Please select a file to upload.";}try {// Save the uploaded file to a specific locationString fileName = file.getOriginalFilename();File dest = new File("path/to/save/" + fileName);file.transferTo(dest);return "File uploaded successfully: " + fileName;} catch (IOException e) {e.printStackTrace();return "Failed to upload file: " + e.getMessage();}}
}

4、启动Spring Boot应用程序后,可以使用工具(如Postman)或编写客户端代码来发送包含文件的POST请求到/upload端点。确保请求的内容类型为multipart/form-data,并在请求体中包含要上传的文件。

测试验证

第一步:启动Spring Boot应用,访问 http://localhost:8080,可以看到如下的文件上传页面。 

第二步:选择一个不大于2MB的文件,点击“提交”按钮,完成上传。

如果上传成功,将显示类似下面的页面:

你可以根据打印的文件路径去查看文件是否真的上传了。 

结论

以上是一个简单的Spring Boot 2.x基础教程,演示了如何实现文件上传功能。你可以根据实际需求进行更多的定制和扩展。

相关文章:

  • 理解:基础地理实体相关概述
  • 局域网中实现一对一视频聊天(附源码)
  • Shp2pb:Shapefile转Protocol Buffers的高效工具
  • 直线模组降噪攻略
  • 【专题】2024年中国白酒行业数字化转型研究报告合集PDF分享(附原数据表)
  • 高性能计算应用优化实践之WRF
  • 深度学习04:无监督学习
  • Golang | Leetcode Golang题解之第433题最小基因变化
  • MongoDB 双活集群在运营商的实践
  • postgresql gcc编译选项解释
  • jinaai/jina-embeddings-v2-base-zh向量模型报错解决
  • 从 0 到 1:互联网产品经理核心技能全解析
  • php thinkphp 小程序发送订阅模板消息通知
  • 如何给多台Linux机器设置时间同步
  • Power Platform开发小技巧,一天一个APP, 如何快速搭建二维码识别器
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • ECMAScript6(0):ES6简明参考手册
  • JavaScript类型识别
  • Java比较器对数组,集合排序
  • Java应用性能调优
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL数据库运维之数据恢复
  • ng6--错误信息小结(持续更新)
  • PHP CLI应用的调试原理
  • Python - 闭包Closure
  • Python3爬取英雄联盟英雄皮肤大图
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • vue-router 实现分析
  • 闭包--闭包之tab栏切换(四)
  • 规范化安全开发 KOA 手脚架
  • 你不可错过的前端面试题(一)
  • 悄悄地说一个bug
  • 双管齐下,VMware的容器新战略
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • #数学建模# 线性规划问题的Matlab求解
  • (10)STL算法之搜索(二) 二分查找
  • (超详细)语音信号处理之特征提取
  • (第二周)效能测试
  • (十八)SpringBoot之发送QQ邮件
  • (十八)三元表达式和列表解析
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • (轉貼) UML中文FAQ (OO) (UML)
  • *Django中的Ajax 纯js的书写样式1
  • *上位机的定义
  • .Mobi域名介绍
  • .NET 4.0中的泛型协变和反变
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net 7和core版 SignalR
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET 设计模式—适配器模式(Adapter Pattern)