前端页面上的操作
- 首先要在需要上传的from表单上添加 enctype=“multipart/form-data”,这个标明该from表单是分块提交的东东;而且提交方法必须是post,action是路径提交到那个servlet,方法名隐藏域是为了找servlet上的action=update的方法。
- 然后得有文件上传的框
<input type="file" id="***" name="pic"/>
,id值自定义,name也是自定义,这里是为了与后面对应。
后台servlet上的操作
头像上传涉及用户信息修改,这里直接带上一起写了,下面注释很清楚,有上传的法子哦!另外注意servlet上要用@MultipartConfig注释
servlet代码如下:
//修改/更新个人信息
protected void update(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException, InvocationTargetException, IllegalAccessException {
//判断用户是否登录超时
Object loginUser = request.getSession().getAttribute("loginUser");
if (loginUser == null){
//用户被清空了
request.setAttribute("msg","用户登录超时,请重新登录!");
request.getRequestDispatcher("/msg.jsp").forward(request,response);
return;
}
//获取用户信息,把用户信息封装
User user = new User();
BeanUtils.populate(user,request.getParameterMap());
//文件上传
//获取上传的文件
Part picPart = request.getPart("pic");
if (picPart != null){
//不为空,获取文件名称
String fileName = picPart.getSubmittedFileName();
if (StringUtils.isBlank(fileName)) {
//为了避免文件重名,给它重新命名
fileName = UUIDUtils.getId() + "_" + fileName;
//获取文件存放目录的真实路径
String dirPath = this.getServletContext().getRealPath("/img");
//保存文件
picPart.write(dirPath + "/" + fileName);
//设置用户pic属性
user.setPic("img/" + fileName);
}
}
//调用service的方法,进行更新
userService.update(user);
//查询出用户的最新信息,放入session中
User existUser = userService.findById(user.getUid());
request.getSession().setAttribute("loginUser",existUser);
//重定向到home_index.jsp
response.sendRedirect(request.getContextPath()+"/home_index.jsp");
}