文件上传的性能实现是咱们做 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>
<hr>
<input type="submit" value="提交">
</form>
</body>
</html>
第四步:创立文件上传的解决控制器,命名为 UploadController
@Controller
@Slf4j
public class UploadController {@Value("${file.upload.path}")
private String path;
@GetMapping("/")
public String uploadPage() {return "upload";}
@PostMapping("/upload")
@ResponseBody
public 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();}
}
其中蕴含这几个重要元素:
- 成员变量
path
,通过@Value
注入配置文件中的file.upload.path
属性。这个配置用来定义文件上传后要保留的目录地位。 - GET 申请,门路
/
,用于显示upload.html
这个文件上传页面。 - POST 申请。门路
/upload
,用于解决上传的文件,即:保留到file.upload.path
配置的门路上面。
留神:这里次要演示文件上传的次要流程,实在利用还有更多内容要思考,比方:文件上传后的文件名解决(避免重名)、分布式状况下文件上传后如何共享拜访等。更高级的最初,咱们后续文章持续讲。
第五步 :编辑application.properties
配置文件
spring.servlet.multipart.max-file-size=2MB
spring.servlet.multipart.max-request-size=2MB
file.upload.path=/Users/didi/
前两个参数用于限度了上传申请和上传文件的大小,而 file.upload.path
是下面咱们本人定义的用来保留上传文件的门路。
更多本系列收费教程连载「点击进入汇总目录」
测试验证
第一步:启动 Spring Boot 利用,拜访http://localhost:8080
,能够看到如下的文件上传页面。
第二步:抉择一个不大于 2MB 的文件,点击“提交”按钮,实现上传。
如果上传胜利,将显示相似上面的页面:
你能够依据打印的文件门路去查看文件是否真的上传了。
代码示例
本文的相干例子能够查看上面仓库中的 chapter4-3
目录:
- Github:https://github.com/dyc87112/SpringBoot-Learning/
- Gitee:https://gitee.com/didispace/SpringBoot-Learning/
如果您感觉本文不错,欢送 Star
反对,您的关注是我保持的能源!
欢送关注我的公众号:程序猿 DD,取得独家整顿的收费学习资源助力你的 Java 学习之路!另每周赠书不停哦~