- 首先导入依赖
<!--
2.直接上代码
@Controller
@RequestMapping("/api/abu")
public class FileUploadController {
private static final String UPLOAD_PATH="/static/upload";
@PostMapping("fileUpload")
public ServerResponse fileUpload(HttpServletRequest request){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//定义文件名变量
String fileName = "";
String fileSuffix = "";
System.out.println("项目绝对路径"+request.getSession().getServletContext().getRealPath("/"));;
//判断请求中是否包含文件
if (multipartResolver.isMultipart(request)) {
MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
Iterator<String> iter = multiRequest.getFileNames();
while (iter.hasNext()) {
// 由CommonsMultipartFile继承而来,拥有上面的方法.
MultipartFile file = multiRequest.getFile(iter.next());
if (file != null) {
//原文件名
String oldFileName = file.getOriginalFilename();
//获取文件后缀
fileSuffix = oldFileName.substring(oldFileName.lastIndexOf("."), oldFileName.length());
//重命名
fileName = UUID.randomUUID().toString() + System.currentTimeMillis() + fileSuffix;
String filePath = request.getSession().getServletContext().getRealPath(UPLOAD_PATH);
//path 图片保存路径
//String path = (new File(request.getServletContext().getRealPath("/")))
//.getParent() + "/upload" + request.getContextPath() + "/image";
String path = request.getSession().getServletContext().getRealPath(UPLOAD_PATH);
File localFile = new File(path);
// 如果文件夹不存在 创建文件夹
if (!localFile.exists()) {
localFile.mkdirs();
}
File targetFile = new File(path, fileName);
try {
//保存图片
file.transferTo(targetFile);
} catch (IOException e) {
e.printStackTrace();
return ServerResponse.createByErrorMessage("erro");
}
}
}
}
return ServerResponse.createBySuccessMessage("success");
}
- MultipartResolver 用于处理文件上传,当收到请求时 DispatcherServlet 的 checkMultipart() 方法会调用 MultipartResolver 的 isMultipart() 方法判断请求中是否包含文件。如果请求数据中包含文件,则调用 MultipartResolver 的 resolveMultipart() 方法对请求的数据进行解析,然后将文件数据解析成 MultipartFile 并封装在 MultipartHttpServletRequest (继承了 HttpServletRequest) 对象中,最后传递给 Controller
- 整体步骤:前端传入文件,获取文件,对文件名重新命名,保存到需要的路径,如路径没有创建文件夹,保存图片
request.getSession().getServletContext().getRealPath()为什么老是输出到target目录的解决办法
1、首先我们得明白request.getSession().getServletContext().getRealPath()获取的是Servlet容器对象,相当于tomcat容器了,所以我们得看看tomcat的配置
2、打开tomcat的配置发现,tomcat默认的输出目录是在target目录下的,我们只需改变输出的目录即可