【SpringMVC】上传多个文件,并响应JSON数据到前端
程序员文章站
2022-04-15 18:55:41
1、导入依赖 commons-io commons-io 2.8.0 commons-fileupload ...
1、导入依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2、配置上传解析器
- 在SpringMVC中进行配置
<!-- 文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5400000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
3、创建页面上传表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<h1>文件上传</h1>
<form action="/user/modifyUser" method="post" enctype="multipart/form-data">
file1: <input type="file" name="files"/> <br>
file2: <input type="file" name="files"/> <br>
file3: <input type="file" name="files"/> <br>
<input type="submit" value="上传文件"/>
</form>
</body>
</html>
4、创建返回封装数据的工具类
public class ResponseData extends HashMap<String, Object>{
public ResponseData put(String name, Object message) {
super.put(name, message);
return this;
}
}
5、创建获取新文件名的工具类
package com.robot.utils;
import java.io.File;
import java.util.HashMap;
import java.util.UUID;
/**
* 上传文件工具类。
*
* @Author 张宝旭
* @Date 2020/10/25
*/
public class UploadUtils {
/**
* 根据原来的文件名来创建新的文件名。
* 新文件名为UUID去掉连接符,接下划线,最后接原来的文件名。
*
* @param oldFileName 原来的文件名
* @return 新的文件名
*/
public static String makeNewFileName(String oldFileName) {
String uuid = String.valueOf(UUID.randomUUID()).replace("-", "");
return uuid + "-" + oldFileName;
}
}
6、创建Controller层,处理上传的文件
package com.robot.controller;
import com.robot.utils.ResponseData;
import com.robot.utils.UploadUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* @Author 张宝旭
* @Date 2020/10/25
*/
@RequestMapping("/user")
@RestController
public class UpLoadController {
@RequestMapping("/modifyUser")
public ResponseData modifyUser(MultipartFile[] files) {
ResponseData responseData = new ResponseData();
if (files != null && files.length > 0) {
// 获取临时存储路径
String path = "C:\\A-Project\\OMINI\\src\\main\\webapp\\image";
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
// 存储所有文件能上传的类型
List<String> suffix = new ArrayList<>();
suffix.add("jpg");
suffix.add("png");
suffix.add("gif");
suffix.add("mp4");
// 检查上传文件是否符合要求
for (int i = 0; i < files.length; i++) {
// 获取文件名,如果文件名为空,则跳过
String filename = files[i].getOriginalFilename();
if (filename == null || filename.equals("")) {
continue;
}
// 获取文件后缀,限制上传文件的类型
String fileSuffix = filename.substring(filename.lastIndexOf(".") + 1);
if (!suffix.contains(fileSuffix)) {
responseData.put("code", -1);
responseData.put("message", "文件格式不符");
return responseData;
}
}
// 文件上传失败的数量
int errorCount = 0;
// 上传文件
for (int i = 0 ; i < files.length ; i++) {
// 获取新的文件名
String newFileName = UploadUtils.makeNewFileName(files[i].getOriginalFilename());
// 上传文件
try {
files[i].transferTo(new File(dir, newFileName));
} catch (IOException e) {
e.printStackTrace();
errorCount++;
}
}
responseData.put("code", 200);
responseData.put("message", "文件上传成功,上传失败数量:" + errorCount);
} else {
responseData.put("code", -1);
responseData.put("message", "文件为空");
}
return responseData;
}
}
其中第四步和第五步为创建工具类,如若不需要,可以进行删减
本文地址:https://blog.csdn.net/weixin_42193813/article/details/109279299
上一篇: Spring 的 AOP 简介