Spring Bootd单/多文件上传

<The rest of contents | 余下全文>

单/多文件上传

upload.html:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE HTML>
<html>
<head>
<title>文件上传</title>
</head>

<body>
<form action="/upload" enctype="multipart/form-data" method="post">
上传文件1:<input type="file" name="file"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

UploadController:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
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 org.springframework.web.multipart.MultipartHttpServletRequest;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.List;

@Controller
public class UploadController {
@GetMapping("/upload")
public String upload() {
return "upload";
}

@GetMapping("/multiUpload")
public String multiUpload() {
return "multiUpload";
}


@PostMapping("/multiUpload")
@ResponseBody
public String multiUpload(HttpServletRequest request) {
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
String filePath = "D:/path/";
for (int i = 0; i < files.size(); i++) {
MultipartFile file = files.get(i);
if (file.isEmpty()) {
return "上传第" + (i++) + "个文件失败";
}
String fileName = file.getOriginalFilename();

File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
} catch (IOException e) {
return "上传第" + (i++) + "个文件失败";
}
}

return "上传成功";

}


@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "上传失败,请选择文件";
}

String fileName = file.getOriginalFilename();
String filePath = "D:/path/";
File dest = new File(filePath + fileName);
try {
file.transferTo(dest);
return "上传成功";
} catch (IOException e) {
}
return "上传失败!";
}
}


multiUpload.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE HTML>
<html>
<head>
<title>文件上传</title>
</head>

<body>
<form action="/multiUpload" enctype="multipart/form-data" method="post">
上传文件:<input type="file" name="file"><br/>
上传文件:<input type="file" name="file"><br/>
上传文件:<input type="file" name="file"><br/>
上传文件:<input type="file" name="file"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

设置上传文件大小的两种方式

springboot 1.5.X系列处理方式

创建tomcat配置类

1
2
3
4
5
6
7
8
9
@Bean  
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大
factory.setMaxFileSize("10240KB"); //KB,MB
/// 设置总上传数据总大小
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();
}

注意
spring.http.multipart.maxFileSize=10Mb
spring.http.multipart.maxRequestSize=10Mb
已经过期 >>>>

在application.properties中添加如下配置信息

application.properties

1
2
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=20MB

maxFileSize 是单个文件大小
maxRequestSize是设置总上传的数据大小

Springboot 2.X系列配置

创建tomcat配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

@Configuration
public class TomcatConfig {


@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
//文件最大10M,DataUnit提供5中类型B,KB,MB,GB,TB
factory.setMaxFileSize(DataSize.of(100, DataUnit.MEGABYTES));
/// 设置总上传数据总大小10M
factory.setMaxRequestSize(DataSize.of(100, DataUnit.MEGABYTES));
return factory.createMultipartConfig();
}
}

配置文件配置

application.properties

1
2
spring.servlet.multipart.max-file-size=20MB
spring.servlet.multipart.max-request-size=20MB