当前位置 博文首页 > 逐墨飞扬的博客:SpringBoot文件上传
废话不多说,直接上代码。
<!-- spring boot web支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf模板引擎依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- 解决Thymeleaf模板代码中如果标签没有关闭报错问题 -->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>1.9.22</version>
</dependency>
SpringBootUploadApplication.java
@SpringBootApplication
public class SpringBootUploadApplication {
// SpringBoot 2.1版本解决Tomcat最大支持10M文件上传问题
/*@Bean
public TomcatServletWebServerFactory tomcatEmbedded() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 means unlimited
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcat;
}*/
// SpringBoot 1.5版本解决Tomcat最大只能上传10M文件问题
@Bean
public TomcatEmbeddedServletContainerFactory tomcatFactory() {
TomcatEmbeddedServletContainerFactory tomcatFactory = new TomcatEmbeddedServletContainerFactory();
tomcatFactory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
if ((connector.getProtocolHandler() instanceof AbstractHttp11Protocol<?>)) {
//-1 为无限制
((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1);
}
});
return tomcatFactory;
}
public static void main(String[] args) {
SpringApplication.run(SpringbootDemoApplication.class, args);
}
}
此处设置为了解决上传文件大于10M出现连接重置的问题
upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="myFile"/>
<br/>
<input type="submit"/>
</form>
</body>
</html>
results.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>结果页</title>
</head>
<body>
<h1 th:text="${msg}">Hello World</h1>
</body>
</html>
UploadController.java
@Controller
public class UploadController {
@RequestMapping("/upload")
public String upload(@RequestParam("myFile") MultipartFile file, Model model) {
if(file.isEmpty() || "".equals(file.getOriginalFilename().trim())){
model.addAttribute("msg", "您没有上传文件");
return "results";
}
ApplicationHome applicationHome = new ApplicationHome(getClass());
// homeDir获取的路径是jar包所在目录的绝对路径(不包含jar包名称)
File applicationHomeDir = applicationHome.getDir();
//定义文件上传路径
File uploadPath = new File(applicationHomeDir, "upload");
//判断文件上传路径是否存在,若不存在则创建文件路径
if (!uploadPath.exists()) {
uploadPath.mkdir();
}
//获取完整的文件名(带后缀)
String originalFileName = file.getOriginalFilename();
//获取不带后缀的文件名,以最后一个`.`作为标识
String fileName = originalFileName.substring(0, originalFileName.lastIndexOf("."));
//获取文件类型,以最后一个`.`作为标识
String fileType = originalFileName.substring(originalFileName.lastIndexOf(".") + 1);
//拼接新的文件名,作为上传文件的名称
String newFileName = fileName + System.currentTimeMillis() + "." + fileType;
try {
file.transferTo(new File(uploadPath, newFileName));
model.addAttribute("msg", "上传成功");
} catch (IOException e) {
e.printStackTrace();
model.addAttribute("msg", "上传失败");
}
return "results";
}
}
cs