引入pom依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
配置web.xml 设置允许上传文件大小
<!--配置控制器-->
<servlet>
<servlet-name>mvcServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--配置文件,读取配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc2.xml</param-value>
</init-param>
<!--配置文件上传大小控制-->
<multipart-config>
<max-file-size>20848820</max-file-size>
<max-request-size>418018841</max-request-size>
<file-size-threshold>1048576</file-size-threshold>
</multipart-config>
</servlet>
1.Part方式单文件上传
// part单文件上传
@PostMapping("/upload1")
public String upload1(HttpServletRequest req) throws ServletException, IOException {
Part file = req.getPart("file");
String realPath = req.getServletContext().getRealPath("/");
System.out.println(realPath);
// 获取文件名,上传的文件名称
String fileName = file.getSubmittedFileName();
file.write(realPath + fileName);
return "game/success";
}
<h3>part单文件上传</h3>
<form action="/spring_mvc_base/game/upload1" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
2 .Part方式多文件上传
// part多文件上传
@PostMapping("/upload2")
public String upload2(HttpServletRequest req) throws ServletException, IOException {
// 获取所有文件
Collection<Part> parts = req.getParts();
String realPath = req.getServletContext().getRealPath("/");
parts.forEach(part -> {
String fileName = part.getSubmittedFileName();
try {
part.write(realPath + fileName);
} catch (IOException e) {
throw new RuntimeException(e);
}
});
return "game/success";
}
3.MVC方式文件上传
导入依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>1.4</version>
</dependency>
文件上传
@Autowired
HttpSession session;
//mvc单文件上传
@PostMapping("/upload3")
public String upload3(MultipartFile file) {
if (file != null && !file.isEmpty()) {
commonUpload(file);
}
return "game/success";
}
//mvc多文件上传
@PostMapping("/upload4")
public String upload4(MultipartFile[] files) {
if (files != null && files.length > 0) {
for (MultipartFile file : files) {
commonUpload(file);
}
}
return "game/success";
}
// MVC上传公共方法
public void commonUpload(MultipartFile file) {
// 获取文件名
String filename = file.getOriginalFilename();
String realPath = session.getServletContext().getRealPath("/imgs/");
// 加一层文件夹
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");
realPath += simpleDateFormat.format(new Date());
// 自动创建文件夹
File file1 = new File(realPath);
if (!file1.exists()) {
file1.mkdirs();
}
String allPath = realPath + RandomUtil.getFileName(filename);
try {
file.transferTo(new File(allPath));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
4.html
<h3>part单文件上传</h3>
<form action="/spring_mvc_base/game/upload1" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
<h3>part多文件上传</h3>
<form action="/spring_mvc_base/game/upload2" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple="multiple">
<input type="submit" value="上传">
</form>
<h3>mvc单文件上传</h3>
<form action="/spring_mvc_base/game/upload3" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
<h3>mvc多文件上传</h3>
<form action="/spring_mvc_base/game/upload4" method="post" enctype="multipart/form-data">
<input type="file" name="files" multiple="multiple">
<input type="submit" value="上传">
</form>
RandomUtil
public class RandomUtil {
private RandomUtil() {
}
private final static String POOL = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
public static String getString(int length) {
if (length <= 0) {
throw new IllegalArgumentException("参数异常,不能小于等于0");
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < length; i++) {
int index = ThreadLocalRandom.current().nextInt(POOL.length());
char c = POOL.charAt(index);
stringBuilder.append(c);
}
return stringBuilder.toString();
}
// 生成随机文件名
public static String getFileName(String filename) {
int lastIndex = filename.lastIndexOf(".");
if (lastIndex == -1) {
throw new IllegalArgumentException("文件名异常,没有文件类型");
}
// 获取文件类型
String fileType = filename.substring(lastIndex + 1);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String time = simpleDateFormat.format(new Date());
String name = getString(5) + time + "." + fileType;
return name;
}
}