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

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

动手试试


第一步:创建一个基础的Spring Boot项目,如果还不会的话就先看看这篇《快速入门》。

第二步:在pom.xml中引入模版引擎依赖:

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

你也可以选择其他你熟悉的模版引擎,比如:Freemarker。

第三步:在resources目录下,创建新目录templates;在templates目录下再创建一个文件上传的页面upload.html,内容如下:

<!DOCTYPE html>
<html>
<head lang="en"><meta charset="UTF-8" /><title>文件上传页面</title>
</head>
<body>
<h1>文件上传页面</h1>
<form method="post" action="/upload" enctype="multipart/form-data">选择要上传的文件:<input type="file" name="file"><br data-tomark-pass><hr><input type="submit" value="提交">
</form>
</body>
</html>

第四步:创建文件上传的处理控制器,命名为UploadController

@Slf4j
@Controller
public class UploadController {@Value("${file.upload.path}")private String path;@GetMapping("/")public String uploadPage() {return "upload";}@PostMapping("/upload")@ResponseBodypublic String create(@RequestPart MultipartFile file) throws IOException {String fileName = file.getOriginalFilename();String filePath = path + fileName;File dest = new File(filePath);Files.copy(file.getInputStream(), dest.toPath());return "Upload file success : " + dest.getAbsolutePath();}}

其中包含这几个重要元素:

  1. 成员变量path,通过@Value注入配置文件中的file.upload.path属性。这个配置用来定义文件上传后要保存的目录位置。

  2. GET请求,路径/,用于显示upload.html这个文件上传页面。

  3. POST请求。路径/upload,用于处理上传的文件,即:保存到file.upload.path配置的路径下面。

注意:这里主要演示文件上传的主要流程,真实应用还有更多内容要考虑,比如:文件上传后的文件名处理(防止重名)、分布式情况下文件上传后如何共享访问等。更高级的最后,我们后续文章继续讲。

第五步:编辑application.properties配置文件

spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=2MBfile.upload.path=/Users/didi/

前两个参数用于限制了上传请求和上传文件的大小,而file.upload.path是上面我们自己定义的用来保存上传文件的路径。

更多本系列免费教程连载「点击进入汇总目录」(https://blog.didispace.com/spring-boot-learning-2x/)

测试验证


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

第二步:选择一个不大于2MB的文件,点击“提交”按钮,完成上传。如果上传成功,将显示类似下面的页面:

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

代码示例


本文的相关例子可以查看下面仓库中的chapter4-3目录:

* Github:https://github.com/dyc87112/SpringBoot-Learning/
* Gitee:https://gitee.com/didispace/SpringBoot-Learning/

如果您觉得本文不错,欢迎Star支持,您的关注是我坚持的动力!

往期推荐

人脸识别除了可以破案,还能制造冤案...

Nacos 集群部署模式最佳实践

详解模板注入漏洞(上)

知乎砍出正义一刀,PDD祭出终极防御:“供应商员工”!

IDEA中无法import自己工程中类的问题解决方法

JDK 16 即将发布,新特性速览!

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

  1. spring boot基础教程之文件上传下载

    一文件上传 文件上传主要分以下几个步骤: (1)新建maven java project: (2)在pom.xml加入相应依赖: (3)新建一个文件上传表单页面; (4)编写controller; ( ...

  2. bottle 文件服务器,python bottle 框架基础教程:文件上传 | linux系统运维

    文件上传,需要注意的是前端html的form表单中,要添加 enctype="multipart/form-data"属性,否则无法上传文件.在后端,用request.files方 ...

  3. Spring Boot 2.x基础教程:多文件的上传

    昨天,我们介绍了如何在Spring Boot中实现文件的上传(博客地址:https://blog.didispace.com/spring-boot-learning-21-4-3/).有读者问:那么 ...

  4. Spring Boot 2.x基础教程:使用Elastic Job实现定时任务

    上一篇,我们介绍了如何使用Spring Boot自带的@Scheduled注解实现定时任务(https://blog.didispace.com/spring-boot-learning-2-7-1/ ...

  5. Spring Boot 2.x基础教程:使用EhCache缓存集群

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 上一篇我们介绍了在Spring Boot中整合EhCac ...

  6. Spring Boot 2.x基础教程:使用MyBatis的XML配置方式

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  7. Spring Boot 2.x基础教程:Swagger静态API文档的生成

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | didispace.com/spring-boot-learni ...

  8. Spring Boot 2.x基础教程:Swagger静态文档的生成

    前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了.如果您还不熟悉这块,可以先阅读: Spring Boo ...

  9. Spring Boot 2.x基础教程:使用LDAP来管理用户与组织数据

    很多时候,我们在做公司系统或产品时,都需要自己创建用户管理体系,这对于开发人员来说并不是什么难事,但是当我们需要维护多个不同系统并且相同用户跨系统使用的情况下,如果每个系统维护自己的用户信息,那么此时 ...

  10. Spring Boot 2.x基础教程:使用Elastic Job的分片配置

    上一篇,我们介绍了如何使用Elastic Job实现定时任务(https://blog.didispace.com/spring-boot-learning-2-7-2/).解决了使用@Schedul ...

最新文章

  1. 基于VTK的Delaunay的三角剖分算法
  2. Delphi Code Editor 之 编辑器选项
  3. 字符串拷贝函数memcpy()、strncpy()和snprintf()性能之比较
  4. android ScrollView实现上拉、下拉更新
  5. 32.ExtJS简单的动画效果
  6. Windows8.1提升权限安装程序
  7. 开发者在家办公第一天,竟然是这样度过的......
  8. windows下phpstorm的高效使用
  9. Socket Programming
  10. unable to remove repository reference  (must force) - container is using its referenced image
  11. IPC$***--个人练习
  12. router走差分_route
  13. jax指标的用法_济安线预警指标?JAX指标?
  14. 通过手机获取微信公众号封面
  15. MFC (如何通过点击botton打开一个文件夹/文件)
  16. Win10家庭中文版( 连接远程桌面要求的函数不受支持、这可能是由于 CredSSP 加密 Oracle 修正 )
  17. UE4.CPP变焦推进效果(_杰森大师)
  18. 根据先序序列和中序,后序和中序序列创建二叉树
  19. 相机光学(十二)——面阵相机与线阵相机
  20. 关于C语言的独立(freestanding)和托管(hosted)环境

热门文章

  1. Oracle等待事件说明
  2. eclipse 启动 找不到 JRE JDK的解决方法
  3. python3 字符串 统计子字符数量 内置方法count
  4. linux centos grub grub2 加密、清除
  5. 搜索引擎语法简介 google shodan censys zoomeye fofa dnsdb
  6. docker 中删除dead状态的容器
  7. python3 request模块 https certificate verify failed 错误
  8. python3 raise 抛出异常
  9. WinDbg 脚本实例,可以显示 SSDT
  10. Windows的驱动开发模型