基于SpringBoot的文件上传
上传方式:
- 1.直接上传到应用服务器
- 2.上传到OSS(阿里云、七牛云)
- 3.前端将图片转成Base64编译上传(仅用于小容量图片)
使用第一种方式的步骤
-
1、创建upload模块
填写模块名和包名
注意勾选web和thymeleaf选项
- 2、添加web、thymeleaf依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 3、限制文件大小(在resources目录下的application.properties下写限制条件)
spring.servlet.multipart.max-file-size=100MB
- 4、使用java.nio.files实现文件的上传(在com.spring.upload包下建一个controller包,controller包下建一个UploadController类,在UploadController下编写代码)
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* 上传文件控制器
* 直接上传到服务器
*/
@Controller
public class UploadController {
//制定一个临时路径
//private static String UPLOAD_FOLDER="E:/temp/";
//遇到http://localhost:8080则跳转到upload.html
@GetMapping("/")
public String index(){
return "upload";
}
@PostMapping("/upload")
public String fileUpload(@RequestParam("file") MultipartFile srcFile, RedirectAttributes redirectAttributes){
if(srcFile.isEmpty()){
redirectAttributes.addFlashAttribute("message","选择一个文件");
return "redirect:upload_status";
}
try {
File destFile=new File(ResourceUtils.getURL("classpath").getPath());
if(destFile.exists()){
destFile=new File("");
}
//输出目标文件的绝对路径
System.out.println("file path:"+destFile.getAbsolutePath());
//拼接子路经
File upload=new File(destFile.getAbsolutePath(),"static/");
//目标文件不存在,创建一个
if(!upload.exists()){
upload.mkdirs();
}
System.out.println("完整的上传路径:"+upload.getAbsolutePath()+"/"+srcFile.getOriginalFilename());
byte[] bytes=srcFile.getBytes();
//拼接上传路径
//Path path= Paths.get(UPLOAD_FOLDER+srcFile.getOriginalFilename());
//通过项目路径,拼接上传路径
Path path=Paths.get(upload.getAbsolutePath()+"/"+srcFile.getOriginalFilename());
Files.write(path,bytes);
redirectAttributes.addFlashAttribute("message","文件上传成功");
}catch (IOException e){
e.printStackTrace();
}
return "redirect:upload_status";
}
//匹配upload_status
@GetMapping("/upload_status")
public String uploadStatusPage(){
return "upload_status";
}
}
- 5、resources->templates下建html文件
- upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>spring boot文件上传</title>
</head>
<body>
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
- upload_status.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>文件上传状态显示</title>
</head>
<body>
<h2>spring boot文件上传状态</h2>
<div th:if="${message}">
<h2 th:text="${message}"></h2>
</div>
</body>
</html>
运行结果
选择文件
上传
查看文件夹(上传成功)