SpringBoot文件上传
这里只记录容易出现问题的点:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form id="upload" name="formname" role="form" action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile" value="请选择文件">
<input type="submit" value="上传">
</form>
</body>
</html>
HTML:
1、enctype="multipart/form-data"
的拼写
容易误写成~~entype="multipart/form-data~~ "
2、中的属性 ID name role 是非必须的,action、method是必须的,action的值要与controller的mapping一致。method=‘post’
Controller:
@RestController
public class UploadController {
SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd");
@PostMapping("/upload")
public String uploadFiles(@RequestParam(value = "uploadFile") MultipartFile uploadFile, HttpServletRequest req){
String realpath=req.getSession().getServletContext().getRealPath("/uploadFile/");
String formDate=sd.format(new Date());
File folder=new File(realpath+formDate);
if(!folder.isDirectory())folder.mkdirs();
String oldname=uploadFile.getOriginalFilename();
String newname= UUID.randomUUID().toString()+oldname.substring(oldname.indexOf("."),oldname.length());
try {
uploadFile.transferTo(new File(folder,newname));
String filePath=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/uploadFile/"+formDate+"/"+newname;
return filePath;
} catch (IOException e) {
e.printStackTrace();
}
return "上传失败";
}
}
1、@PostMapping("/upload")
与html中的action对应
2、@RequestParam(value = "uploadFile") MultipartFile uploadFile
参数前的注解不能缺失,否则参数无法正常注入
3、if(!folder.isDirectory())folder.mkdirs();
这里注意用mkdirs()方法才能创建多层文件夹,如果用了mkdir()加上tomcat临时文件夹的机制,没有办法创建tomcat-docbase.*********.8080文件夹下层的/uploadFile/2020-09-18
后续如果遇到更加复杂的问题,再在这里补充