前台html整页代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>上传文件夹</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
</head>
<body>
<form action="/file/upload" enctype="multipart/form-data" method="post">
<input type='file' webkitdirectory >
<button id="upload-btn" type="button">upload</button>
</form>
</body>
<script>
$(function () {
var files = [];
// 操作dom获取input的数据,多个input的话,用id获取
$(document).ready(function(){
$("input").change(function(){
files = this.files;
});
});
// 绑定点击事件,ajax请求
$("#upload-btn").click(function () {
var formData = new FormData();
for (var i = 0; i < files.length; i++) {
// "file"是后台接口的参数名
formData.append("file", files[i]);
}
$.ajax({
url : "换成后台接口路径",
type : 'POST',
data : formData,
contentType : false,
processData : false,
cache : false,
success : function(data) {
console.log("成功!");
}
});
})
})
</script>
</html>
java接口完整代码
@ApiOperation(value = "上传文件夹")
@RequestMapping(value = "/wenjianjia", headers = "content-type=multipart/*", method = RequestMethod.POST)
public Result<Object> upload(@RequestParam("file") MultipartFile[] file) {
for (MultipartFile mf : file) {
File file1;
String name = "";
try {
//转换成这个对象,然后我们需要通过里面的FileItem来获得相对路径
CommonsMultipartFile f2 = (CommonsMultipartFile) mf;
name = f2.getFileItem().getName();
file1 = new File(System.getProperty("user.dir") + "/test/" + name);
file1.mkdirs();
file1.createNewFile();
mf.transferTo(file1);
} catch (Exception e) {
e.printStackTrace();
return new ResultUtil<Object>().setErrorMsg("上传文件夹失败," + e.getMessage());
}
}
return new ResultUtil<Object>().setSuccessMsg("上传文件夹成功");
}
代码说明:
- Result是我封装的交互类,你们要换成自己的出参。
- System.getProperty("user.dir")是java获取项目根目录绝对路径的方法。
- CommonsMultipartFile需要pom.xml导入依赖。
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
- Application启动类:
- 须添加以下配置,否则,MultipartFile转CommonsMultipartFile会报错。
- 允许自动加载,@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
@SpringBootApplication @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class}) public class ServerApplication { public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args); } @Bean(name = "multipartResolver") public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); resolver.setResolveLazily(true); //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setMaxInMemorySize(20971520);// 根据需求更换大小 resolver.setMaxUploadSize(104857600);// 根据需求更换大小 return resolver; } }
测试