我想在SpringBoot中实现一个文件从网页上传 ,能获取名称,存入数据库,但是,不知道怎样将多文件上传到服务器,能获取名称,存入数据库。
应该是用MultipartFiles【】 files,但是不清楚方法里面应该怎样写。
下面是单个文件上传的接收方式
@PostMapping("/input")//3.网页得到提交的接口进来
public String inputSong(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {
if (file.isEmpty()) {
return "文件为空";
}
@RequestMapping(value = "/imgs", method = RequestMethod.POST)
public void uploadFile(@RequestParam("file") MultipartFile[] files) {
for (MultipartFile file : files) {
System.out.println("file:"+file.getOriginalFilename());
//1.文件后缀过滤,只允许部分后缀
//文件的完整名称,如spring.jpeg
String filename = file.getOriginalFilename();
//文件名,如spring
String name = filename.substring(0, filename.indexOf("."));
//文件后缀,如.jpeg
String suffix = filename.substring(filename.lastIndexOf("."));
//2.创建文件目录
//创建年月文件夹
Calendar date = Calendar.getInstance();
File dateDirs = new File(date.get(Calendar.YEAR)+
"-"+ (date.get(Calendar.MONTH) + 1));
String newFilename = UUID.randomUUID().toString().substring(3,20)+suffix;
//目标文件
File descFile = new File(rootPath + File.separator + dateDirs + File.separator + newFilename);
//判断目标文件所在的目录是否存在
if (!descFile.getParentFile().exists()) {
//如果目标文件所在的目录不存在,则创建父目录
descFile.getParentFile().mkdirs();
}
//3.存储文件
//将内存中的数据写入磁盘
try {
file.transferTo(descFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
打印结果:
多文件上传,两种思路:
思路1,服务端还可以实现断点续传功能,客户端还可以针对每个文件的上传过程添加进度条,但是,编程复杂度高一点。
思路2,即目前楼主的方案,在springboot里面,单个的会接收,多个的搞成数组即可。
@RequestParam("file") MultipartFile[] file, ....