在springMVC中如何添加文件上传功能

springmvc-servlet.xml中需要定义 <bean>:

<!--配置MultipartResolver,用于文件上传-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="5000000"/>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

  id必须是 :multipartResolver  不允许更改!!!!!

表示层中的form表单中 必须添加属性 

enctype="multipart/form-data"

  表单中定义上传的div

 <div>
                    <input type="hidden" id="errorinfo" value="${uploadFileError }"/>
                    <label for="a_idPicPath">证件照:</label>
                    <input type="file" name="aIdPicPath" id="a_idPicPath" value="">
                    <font color="red"></font>
                </div>

  

Controller中的主要代码:

定一个addsave方法,添加用户的数据的同时,可以选择性上传用户头像。

@RequestMapping(value = "/addsave.html", method = RequestMethod.POST)
    public String addUserSave(User user, HttpSession session,
                              HttpServletRequest request,
                              @RequestParam(value = "aIdPicPath",required = false)CommonsMultipartFile attach)
    {
        //定义文件上传路径
        String idPicPath = null;
        //判断文件是否为空
        if (!attach.isEmpty())
        {
            //定义上传目标路径
            String path = request.getSession().getServletContext().getRealPath("statics" + File.separator + "uploadfles");
            //获取用户上传的文件名,用于回显,提高用户体验感
            String oldFileName = attach.getOriginalFilename();
            //获取文件名后缀,用于后续逻辑判断
            String prefix = FilenameUtils.getExtension(oldFileName);
            //定义文件大小
            int filesize = 500000;
            //比较文件大小
            if (attach.getSize() > filesize)
            {
                request.setAttribute("uploadFileError", "*上传大小不得超过500k");
                return "useradd";
            } else if (
                //比较文件是否指定类型
                    prefix.equalsIgnoreCase("jpg")
                            || prefix.equalsIgnoreCase("jpeg")
                            || prefix.equalsIgnoreCase("png")
                            || prefix.equalsIgnoreCase("pneg"))
            {
                //当前系统时间+随机数+"_Personal.jpg" 重新定义文件是否重名
                String fileName = System.currentTimeMillis() + RandomUtils.nextInt(10000000) + "_Personal.jpg";
                //创建新文件
                File targetFile = new File(path, fileName);
                if (!targetFile.exists())
                {
                    targetFile.mkdirs();
                }
                try
                {
                    //将内存中的文件写入磁盘中
                    attach.transferTo(targetFile);
                } catch (IOException e)
                {
                    e.printStackTrace();
                    request.setAttribute("uploadFileError", "*上传失败");
                    return "useradd";
                }
                //文件上传路径赋值
                idPicPath = path + File.separator + fileName;
            } else
            {
                request.setAttribute("uploadFileError", "*上传图片格式不得超过500k");
                return "useradd";
            }
            //设置用户创建者ID(从会话中获取)
            user.setCreatedBy(((User) session.getAttribute(Constants.USER_SESSION)).getId());
            //设置用户创建时间
            user.setCreationDate(new Date());
            user.setIdPicPath(idPicPath);
            if (userService.add(user))
            {
                return "redirect:/user/userlist.html";
            }
        }
        return "useradd";
    }

Dao层之后的代码可以使用mybatis 或者 JDBC 这里就不贴代码了!

猜你喜欢

转载自www.cnblogs.com/nekosann/p/9570394.html