完整SpringMVC上传图片组件及保存图片地址到数据库

来源:互联网 发布:在哪注册域名比较好 编辑:程序博客网 时间:2024/04/29 19:58

在阅读网上众多资源后,发现SpringMVC上传的资料非常杂乱,没有一个能解决问题。

今天自己实践了一次,把经验分享给大家。

本人也是菜鸟,还请大神多多指点.......

1.SpringMVC使用的是commons-fileupload实现文件上传

所以要引入commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar。这两个jar包是必要的。

2.在applicationContext.xml中配置multipartResolver

<!-- 下载组件 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">        
        <property name="defaultEncoding" value="utf-8"></property>   
        <property name="maxUploadSize" value="2048000"></property>
        <property name="uploadTempDir" value="resources/img/user"></property>        
    </bean>

3.在Controller的方法中添加MultipartFile参数。该参数用于接收表单中file组件的内容

/**
     * 上传头像接口
     *
     * @param userPerson
     * @return
     */

    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    @ResponseBody
    public String fileUpload(
            @RequestParam(value = "userId", required = true) Long userId,
            @RequestParam("file") MultipartFile file,
            HttpServletRequest request) {
        ReturnData<UserPerson> returnData = new ReturnData<UserPerson>();
         if (!file.isEmpty()) {  
                try {  
                    if(userId!=null){
                    UserPerson userperson = baseService.getById(UserPerson.class, userId);
                    // 文件保存路径  
                    String filePath = request.getSession().getServletContext().getRealPath("/") + "resources/img/user/"  
                            + file.getOriginalFilename();  
                    // 转存文件  
                    file.transferTo(new File(filePath));  
                      //上传的文件名
                    String filename=file.getOriginalFilename();
                     //文件的扩张名
                    String extensionName = filename.substring(filename.lastIndexOf(".") + 1);
                    //得到新的文件名
                    String newFileName = "resources/img/user/"+String.valueOf(userperson.getId())+"."+extensionName;
                    userperson.setImageUrl(newFileName);
                    baseService.update(userperson);

                    }
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
                
            }  
         return Jacksons.me().readAsString(returnData);//这是返回的是一个字符串,使用到Jacksons.me()组件
        }
这个是我用来实现头像上传的并改名存到数据库中

4.编写前台表单。注意enctype="multipart/form-data"以及<input type="file" name="****"/>

   <form action="<%=basePath%>userPerson/upload" method="post" enctype="multipart/form-data"> 
    选择文件:<input type="file" name="file">  
    <input type="submit" value="提交">   
</form>
就这些,自己理解下应该没什么问题....希望对大家有用

1 0