用户信息修改
修改头像(文件上传)
上传工具类UploadFileUtils.java:
public class UploadFileUtils {
/**
* 获取文件后缀
*/
public static String getSuffixName(MultipartFile file) {
String fileName = file.getOriginalFilename(); //getOriginalFilename()获取文件的完整名称,包括文件名称+文件拓展名
if (!StringUtils.hasText(fileName)) {
throw new RuntimeException("获取文件后缀失败");
}
return fileName.substring(fileName.lastIndexOf("."));
}
/**
* 生成文件名称通用方法
*/
public static String getNewFileName(String suffixName) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
int random = new Random().nextInt(100);
StringBuilder tempName = new StringBuilder();
tempName.append(sdf.format(new Date())).append(random).append(suffixName);
//当前日期时间+两位随机数+文件后缀
return tempName.toString();
}
/**
* 获取服务器主机名
*/
public static URI getHost(URI uri) {
URI effectiveURI;
try {
effectiveURI = new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), null, null, null);
} catch (Throwable var4) {
effectiveURI = null;
}
return effectiveURI;
}
}
AuserController.java:
@PostMapping({"/upload/userImg"})
@ResponseBody
public boolean upload(HttpServletRequest request, @RequestParam("file")
MultipartFile file, HttpSession session) throws IOException, URISyntaxException
{
/*1、给文件起一个新的文件名--------------------*/
String suffixName = UploadFileUtils.getSuffixName(file);
String newFileName = UploadFileUtils.getNewFileName(suffixName);
/*-----------------------------------------*/
/*2.在本机(或服务器)创建一个文件夹-----------*/
String realPath = System.getProperty("user.dir") + "\\upload\\";
//System.getProperty("user.dir")获取该项目在本机上的绝对路径,比如“C:\java\demo”
//realPath:图片在服务器上的物理存储地址,比如“C:\java\demo\\upload”
File fileDirectory = new File(realPath); //在内存中创建文件夹映射对象,比如“C:\java\demo\\upload”
File destFile = new File(realPath + newFileName); //在内存中创建文件映射对象,比如“C:\java\demo\\upload\xxxx.jpg”
if (!fileDirectory.exists() && !fileDirectory.mkdirs()) {
System.out.println("文件夹创建失败!");
return false;
}
/*-----------------------------------------*/
/*3.把file以新文件名形式存入本机(或服务器)文件夹-----*/
file.transferTo(destFile);
/*----------------------------------------------*/
/*4.创建能访问该文件的URL地址(不是电脑的物理地址、不是绝对路径)放入数据库表-----*/
//new URI()生成一个统一资源定位地址,例如URL,如果语法不正确则抛出异常
URI uri = new URI(request.getRequestURL() + "");
//http://localhost:8081/admin/upload/userImg/
uri = UploadFileUtils.getHost(uri); //http://localhost:8081
String sqlImg = uri + "/upload/" + newFileName; //sqlImg:存入数据库表中的图片地址,比如“http://localhost:8081/upload/xxxx.jpg”
if (auserService.updateAuser(session.getAttribute("name").toString(),
session.getAttribute("pwd").toString(), sqlImg)) {
session.setAttribute("userimg", sqlImg);
return true;
} else {
return false;
}
/*--------------------------------------------------------------------*/
}
MyWebMvcConfigurer.java增加静态资源拦截器配置:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("classpath:/uplo
ad/","file:upload/");
//当访问路径是addResourceHandler中的路径时,映射到访问addResourceLocations中的本地
路径
//classpath:/ 项目打包为jar文件后,jar包根目录
//file: Maven项目的目录下(与pom.xml同目录);项目打包后jar包根目录
}
验证图片上传和显示效果,项目打jar包,target下生成 example-1.0.jar(先屏蔽掉 pom.xml中的,skip元素为true时,Maven会跳过项目的构建过程,项目不会被编译打包):

命令行运行:java -jar example-1.0.jar,脱离IDEA运行项目。
application.properties配置上传文件大小:
命令行运行:java -jar example-1.0.jar,脱离IDEA运行项目。
application.properties配置上传文件大小: