SpringBoot实现文件上传

下面是用SpringBoot完成文件上传的代码:

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
@Controller
@RequestMapping("/upload")
public class UploadController {

@ResponseBody
@RequestMapping("/upload")
public String httpUpload(@RequestParam("files") MultipartFile files[]){
String uploadFilePath="D:\\laiscdata";
JSONObject object=new JSONObject();
for(int i=0;i<files.length;i++){
String fileName = files[i].getOriginalFilename(); // 文件名
File dest = new File(uploadFilePath +'\\'+ fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
files[i].transferTo(dest);
} catch (Exception e) {
System.out.println("程序错误:"+e);
object.put("success",2);
object.put("result","程序错误,请重新上传");
return object.toString();
}
}
object.put("success",1);
object.put("result","文件上传成功");
return object.toString();
}

}

上面的代码看起来有点多,其实就是一个上传的方法,首先通过 MultipartFile 接收文件。这里我用的是file[] 数组接收文件,这是为了兼容多文件上传的情况,如果只用file 接收,然后在接口上传多个文件的话,只会接收最后一个文件。这里大家注意一下。看自己的需求,我这里兼容多文件所以用数组接收。

然后遍历files 获取文件,下面这段代码是判断文件在所在目录是否存在,如果不存在就创建对应的目录。

1
2
3
4
File dest = new File(uploadFilePath +'\\'+ fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}

下面就是将文件存放到对应的服务器,这里有一点需要说明一下,如果我们上传重复的文件会怎么样么?上传重复的文件不会报错,后上传的文件会直接覆盖已经上传的文件。

1
files[i].transferTo(dest);

测试:

下面是HTML的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="http://localhost:8088/upload/upload">
<p>请选择要上传的文件:</p>
<p><input type="file" name="files" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>