Java实现上传头像
- 在项目开发中我们会有上传头像,修改头像的操作,controller代码如下
public static final int AVATAR_MAX_SIZE = 10 * 1024 *1024;
public static final List<String> 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<String> 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("文件类型异常");
}
String parent = session.getServletContext()
.getRealPath("upload");
File dir = new File(parent);
if (!dir.exists()){
dir.mkdirs();
}
String originalFilename = file.getOriginalFilename();
int index = originalFilename.lastIndexOf(".");
String suffix = originalFilename.substring(index);
String fileName = UUID.randomUUID().toString().toUpperCase() + suffix;
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;
userService.changeAvatar(getuidFromSession(session),avatar,getUsernameFromSession(session));
return new JsonResult<>(OK,avatar);
}
<script type="text/javascript">
$(document).ready(function () {
var avatar = $.cookie("avatar");
$("#img-avatar").attr("src",avatar);
})
$("#btn-change-avatar").click(function () {
$.ajax({
url:"/users/changeAvatar",
type:"POST",
data:new FormData($("#form-change-avatar")[0]),
processData: false,
contentType: false,
dataType:"JSON",
success:function (data) {
if (data.state === 200){
alert("上传成功");
$("#img-avatar").attr("src",data.data);
$.cookie("avatar",data.data,{expires:7})
}else {
alert("上传失败")
}
},
error:function (err) {
alert("登录时产生未知异常"+err.message)
}
}
);
})
</script>