Java实现上传头像
- 在项目开发中我们会有上传头像,修改头像的操作,controller代码如下
//设置上传文件的最大值
public static final int AVATAR_MAX_SIZE = 10 * 1024 *1024;
//设置上传文件类型
public static final List AVATAR_TYPE = new ArrayList<>();
//使用静态块给图片类型赋值
static {
AVATAR_TYPE.add("image/jpeg");
AVATAR_TYPE.add("image/png");
AVATAR_TYPE.add("image/bmp");
AVATAR_TYPE.add("image/gif");
}
@RequestMapping("/changeAvatar")
public JsonResult changeAvatar(HttpSession session,
@RequestParam("file") MultipartFile file){
//这里面抛出的异常是我们自定义的异常,根据项目需要修改
if (file.isEmpty()){
throw new FileEmptyException("文件为空");
}
if (file.getSize() > AVATAR_MAX_SIZE){
throw new FileSizeException("文件大小超出限制");
}
if (!AVATAR_TYPE.contains(file.getContentType())){
throw new FileTypeException("文件类型异常");
}
//获取session中的上传路径
String parent = session.getServletContext()
.getRealPath("upload");
//判断这个路径上面的文件是否存在,不存在就创建
File dir = new File(parent);
if (!dir.exists()){
dir.mkdirs();
}
//获取文件的名称
String originalFilename = file.getOriginalFilename();
//获取文件后缀名suffix
int index = originalFilename.lastIndexOf(".");
String suffix = originalFilename.substring(index);
//使用uuid重新生成文件名
String fileName = UUID.randomUUID().toString().toUpperCase() + suffix;
//将file文件中的数据写入到dest中
File dest = new File(dir,fileName);
try {
file.transferTo(dest);
} catch (FileStateException e){
throw new FileSizeException("文件状态异常");
} catch (IOException e) {
throw new FileUploadIOException("文件读写异常");
}
//获取到文件最后要上传的路径
String avatar = "/upload/" + fileName;
//根据业务调用定义的service层的方法,进行操作
userService.changeAvatar(getuidFromSession(session),avatar,getUsernameFromSession(session));
return new JsonResult<>(OK,avatar);
}