ssm实现上传文件

  本文介绍 ssm (Spring+SpringMVC+Mybatis)实现上传功能。 以一个添加用户的案例介绍(主要是将上传文件)。

一、需求介绍

我们要实现添加用户的时候上传图片(其实任何文件都可以)。 文件名:以 博客名+日期的年月日时分秒毫秒形式命名 如 言曌博客2017082516403213.png 路径:上传到 uploads 文件夹,并 生成相应的 年和月 子文件夹 如 uploads/2017/8/言曌博客2017082516403213.png   数据库:将"年/月/"+文件名 存储到数据表中 如 2017/8/言曌博客20170825164809907.jpg    

二、导入 Jar 包

上传功能需要额外的两个 jar 包,如下   导入 环境中 我这里使用是 Maven,添加依赖
  1. <!--文件上传-->
  2. <dependency>
  3.   <groupId>commons-fileupload</groupId>
  4.   <artifactId>commons-fileupload</artifactId>
  5.   <version>1.2.2</version>
  6. </dependency>
  7. <dependency>
  8.   <groupId>commons-io</groupId>
  9.   <artifactId>commons-io</artifactId>
  10.   <version>2.4</version>
  11. </dependency>
  三、代码结构     文件上传到如图 uploads,如果你和博主也是使用了 Maven,文件其实是上传到 ForestBlog\target\ForestBlog\resource\uploads\2017\8 里面,这个没影响的。 但是要要记得在 clean 之前把 \target\ForestBlog\resource\uploads 文件复制到 src\main\ForestBlog\resource\uploads 中

四、代码实现

我们这里主要看上传部分代码,其他的配置文件也贴一下吧 1、springmvc 配置 (springmvc.xml部分代码)
  1. <!--文件上传-->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3.     <!--设置上传最大尺寸为5MB-->
  4.     <property name="maxUploadSizePerFile" value="5242880"/>
  5.     <property name="defaultEncoding" value="UTF-8"/>
  6.     <property name="resolveLazily" value="true"/>
  7. </bean>
  2、jsp 页面 (createUser.jsp部分代码)
  1. <form action="${pageContext.request.contextPath}/createUserSubmit.action"
  2.       method="post" enctype="multipart/form-data" >
  3.        <input type="file" name="upload_avatar">
  4.        <input type="submit" value="提交">
  5. </form>
  3、控制器代码(UserController.java 中 添加用户类)
  1. //添加用户提交
  2.     @RequestMapping(value = "/createUserSubmit",method = RequestMethod.POST)
  3.     public String createUserSubmit(UserCustom userCustom,MultipartFile upload_avatar ) throws Exception {
  4.         //上传图片
  5.         if(upload_avatar.getSize()!=0) {
  6.             String newFileName = functions.uploadFile(request,upload_avatar);
  7.             userCustom.setAvatar(newFileName);
  8.         }
  9.         userCustom.setLastloginip(functions.getIpAddr(request));
  10.         userService.createUser(userCustom);
  11.         return "redirect:userList.action";
  12.     }
  4、上传文件代码 (functions.java 记得要注入)
  1. //上传文件
  2.     public String  uploadFile(HttpServletRequest request,MultipartFile uploadFile) throws IOException {
  3.         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
  4.         String res = sdf.format(new Date());
  5.         //uploads文件夹位置
  6.         String rootPath =request.getServletContext().getRealPath("/resource/uploads/");
  7.         //原始名称
  8.         String originalFilename = uploadFile.getOriginalFilename();
  9.         //新的文件名称
  10.         String newFileName = "言曌博客"+res+originalFilename.substring(originalFilename.lastIndexOf("."));
  11.         //创建年月文件夹
  12.         Calendar date = Calendar.getInstance();
  13.         File dateDirs = new File(date.get(Calendar.YEAR)
  14.             + File.separator + (date.get(Calendar.MONTH)+1));
  15.         //新文件
  16.         File newFile = new File(rootPath+File.separator+dateDirs+File.separator+newFileName);
  17.         //判断目标文件所在的目录是否存在
  18.         if(!newFile.getParentFile().exists()) {
  19.             //如果目标文件所在的目录不存在,则创建父目录
  20.             newFile.getParentFile().mkdirs();
  21.         }
  22.         System.out.println(newFile);
  23.         //将内存中的数据写入磁盘
  24.         uploadFile.transferTo(newFile);
  25.         //完整的url
  26.         String fileUrl =  date.get(Calendar.YEAR)+ "/"+(date.get(Calendar.MONTH)+1)+ "/"+ newFileName;
  27.         return fileUrl;
  28.     }
主要关注 上传文件的方法,属性注入这里就不赘述了     本文链接:https://liuyanzhao.com/5989.html

发表评论

目前评论:2