本文介绍 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部分代码)
3、控制器代码(UserController.java 中 添加用户类)
//添加用户提交 ???@RequestMapping(value = "/createUserSubmit",method = RequestMethod.POST) ???public String createUserSubmit(UserCustom userCustom,MultipartFile upload_avatar ) throws Exception { ???????//上传图片 ???????if(upload_avatar.getSize()!=0) { ???????????String newFileName = functions.uploadFile(request,upload_avatar); ???????????userCustom.setAvatar(newFileName); ???????} ???????userCustom.setLastloginip(functions.getIpAddr(request)); ???????userService.createUser(userCustom); ???????return "redirect:userList.action"; ???}
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 ????????//完整的url26 ????????String fileUrl = ?date.get(Calendar.YEAR)+ "/"+(date.get(Calendar.MONTH)+1)+ "/"+ newFileName;27 ????????return fileUrl;28 ????}
主要关注 上传文件的方法,属性注入这里就不赘述了
写的步骤很完整、清晰
https://liuyanzhao.com/5989.html
ssm整合-图片上传功能(转)
原文地址:https://www.cnblogs.com/thyHome/p/9097934.html