SpringBoot实战——文件上传一篇搞定
文件上传是一个常见的需求。例如社交平台用户上传头像、电商系统商家上传商品图片、文档管理系统用户上传资料等都会用到。本文详细介绍SpringBoot关于单文件上传、多文件上传以及限制文件大小和类型等几种常见方式。
·
文件上传是一个常见的需求。例如社交平台用户上传头像、电商系统商家上传商品图片、文档管理系统用户上传资料等都会用到。本文详细介绍SpringBoot关于单文件上传、多文件上传以及限制文件大小和类型等几种常见方式。
本文目录
1. 单文件上传
单文件上传是最基础的文件上传场景,当用户选择一个文件并提交到服务器,可以使用 MultipartFile 类型来接收上传的文件。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class SingleFileUploadController {
@PostMapping("/singleFileUpload")
@ResponseBody
public String singleFileUpload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "请选择要上传的文件";
}
try {
// 获取文件名
String fileName = file.getOriginalFilename();
// 定义文件存储路径
String filePath = "uploads/";
File dest = new File(filePath + fileName);
// 检查目录是否存在,不存在则创建
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
// 保存文件
file.transferTo(dest);
return "文件上传成功";
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败";
}
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>单文件上传</title>
</head>
<body>
<form action="/singleFileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
</body>
</html>
enctype="multipart/form-data"是必须的
2. 多文件上传
多文件上传允许用户一次选择多个文件进行上传。可以使用 MultipartFile 数组来接收多个上传的文件。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class MultipleFileUploadController {
@PostMapping("/multipleFileUpload")
@ResponseBody
public String multipleFileUpload(@RequestParam("files") MultipartFile[] files) {
if (files.length == 0) {
return "请选择要上传的文件";
}
for (MultipartFile file : files) {
if (file.isEmpty()) {
continue;
}
try {
String fileName = file.getOriginalFilename();
String filePath = "uploads/";
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败";
}
}
return "文件上传成功";
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>多文件上传</title>
</head>
<body>
<form action="/multipleFileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple>
<input type="submit" value="上传">
</form>
</body>
</html>
input组件需要
multiple支持多文件选择
3. 限制文件大小和类型
在实际开发的时候,可能需要对上传的文件大小和类型进行限制。可以通过配置SpringBoot的 MultipartConfigElement 来实现文件大小限制,同时在代码中检查文件类型。
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;
import javax.servlet.MultipartConfigElement;
@Configuration
public class MultipartConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 单个文件最大10MB
factory.setMaxFileSize(DataSize.ofMegabytes(10));
// 设置总上传数据总大小20MB
factory.setMaxRequestSize(DataSize.ofMegabytes(20));
return factory.createMultipartConfig();
}
}
检查文件类型:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class FileUploadWithLimitController {
@PostMapping("/fileUploadWithLimit")
@ResponseBody
public String fileUploadWithLimit(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "请选择要上传的文件";
}
// 检查文件类型
String contentType = file.getContentType();
if (!"image/jpeg".equals(contentType) && !"image/png".equals(contentType)) {
return "只允许上传jpeg和png格式文件";
}
try {
String fileName = file.getOriginalFilename();
String filePath = "uploads/";
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
file.transferTo(dest);
return "文件上传成功";
} catch (IOException e) {
e.printStackTrace();
return "文件上传失败";
}
}
}
getContentType方法可以获取文件的MIME类型
| ← 上一篇 Java进阶——常用类及常用方法详解 |
记得点赞、关注、收藏哦!
|
下一篇 Java进阶——数组超详细整理 → |
更多推荐


所有评论(0)