目录
SSM实现文件上传
1、修改from表单请求方式改为post,添加属性:
enctype="multipart/form-data"
2、修改springmvc配置文件,添加一下配置
<!-- 配置MultipartResolver,用于上传文件,使用spring的CommonsMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="5000000"/>
<property name="defaultEncoding" value="UTF-8"/>
</bean>
3、后端方法:
1、在请求方法中添加@RequestParam(value ="XXXX", required = false) MultipartFile attach
2、设置/获取文件上传路径
3、获取原文件名称,解析文件类型(文件后缀名)
4、判断文件类型(尽量在前端操作)
5、解析文件大小
6、判断文件大小是否符合要求(尽量在配置中做)
7、修改文件名称(关键字+序列号+随机字符+解析的文件后缀名)
例如:KD38_202302011509_sadflkfh.jpg
8、判断文件上传路径是否存在,若不存在,则需要创建该路径
9、进行文件上传;将路径+文件名转化成File对象,调用transferTo()上传
10、手动给实体对象set文件上传路径的属性值,和其他需要手动set的属性
@PostMapping("/save.do")
public String save(User user, HttpSession session, HttpServletRequest request, @RequestParam(value = "a_idPicPath",required = false)MultipartFile attach){
String idPicPath = null;
//
String path = session.getServletContext().getRealPath("statics" + File.separator + "upload");
System.out.println("文件上传路径:" + path);
//
String oldName = attach.getOriginalFilename();
//
String suffix = oldName.substring(oldName.lastIndexOf("."));
System.out.println("上传的文件类型为:" + suffix);
//
long size = attach.getSize();
if (size > 500 * 1024){
request.setAttribute("error","文件过大");
return "useradd";
}else if (suffix.equalsIgnoreCase(".jpg") || suffix.equalsIgnoreCase(".png")){
//
String newName = System.currentTimeMillis() + RandomUtils.nextInt(0, 1000000) + suffix;
File file = new File(path,newName);
//不存在创建
if (!file.exists()){
file.mkdirs();
}
try {
//把文件写入磁盘
attach.transferTo(file);
}catch (Exception e){
e.printStackTrace();
request.setAttribute("error","文件上传失败!");
return "useradd";
}
idPicPath = path +File.separator+ newName;
}else {
request.setAttribute("error","不支持上传该类型文件!");
return "useradd";
}
user.setIdPicPath(idPicPath);
user.setCreatedBy(((User)session.getAttribute(Constants.USER_SESSION)).getId());
if(userService.add(user)){
return "redirect:list.do";
}else{
return "useradd";
}
}