欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

程序员文章站 2022-07-11 11:39:51
...

2018年1月28日

功能:利用Springmvc 实现单文件上传;使用了MultipartResolver接口,入参为MultipartFile数组,区别SpringMVC(23):使用springmvc+spring+jdbc 优化订单管理系统的示例(单文件上传功能的实现)
【1】项目jar包与文件框架

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

图1

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

图2

【2】View层,在useradd.jsp添加了以下代码:

   <br>
	<h5>以下为上传-多文件测试</h5>
	  <form action="${pageContext.request.contextPath }/user/uploadb" method="post" enctype="multipart/form-data">
	      <div>
		      <input type="hidden" id="errorinfo" value="${uploadFileError}">         
		                文件1:<input type="file" name="uploadFile"/><br/><br/>
	      </div>
	      <div>
		      <input type="hidden" id="errorinfo" value="${uploadFileError}">
		                文件2:<input type="file" name="uploadFile"/><br/><br/>	      
	      </div>
	      <input type="submit" value="上传"/>
   </form>   


注意之处:1、springmvc处理多文件上传,增加file标签即可,但需要注意上传文件的组件名(file的name属性)要一致,这样才能以数组的形式传递给控制器的处理方法。

显示效果:

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)

图3

注意之处:1、文件名要全英文,中文可能会在传输乱码或者报错! 2、文件路径要全英文,中文可能会在传输乱码或者报错!


【3】需要在springmvc配置文件进行MultipartResolver注册(springmvc-servlet.xml):

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

注意之处:1、这里设置了请求的编码格式,设置为UTF-8,要和JSP的pageEncoding设置一样,才能便于读取;2、maxUploadSize,上传文件的大小上限,单位是字节(Byte);


【4】Controller控制器,主要是对文件上传确定后的一些后台处理(文件名称、大小、格式是否合格),因此,只需要在UserController.java文件添加处理方法:

	@RequestMapping(value="/uploadb",method=RequestMethod.POST)
	public String test2(User user,HttpSession session,
			HttpServletRequest request,
			@RequestParam(value="uploadFile",required=false)MultipartFile[] uploadFiles) throws SQLException{
		String errorInfo = null;
		String idPicPath = null;
		String workPicPath = null;
		boolean flag = true;
		//获取保存文件的绝对路径
		String path = request.getSession().getServletContext().getRealPath("statics"+File.separator+"uploadfiles");
		System.out.println("2.1 uploadFile path ===>"+path);
		
		for(int i=0;i<uploadFiles.length;i++){
			MultipartFile uploadFile = uploadFiles[i];
			if(!uploadFile.isEmpty()){
				if(i==0){
					errorInfo = "uploadFileError!";
				}else if(i==1){
					errorInfo = "uploadWpError!";
				}
				String oldFileName = uploadFile.getOriginalFilename();
				String prefix = FilenameUtils.getExtension(oldFileName);
				int filesize = 500000;
				if(uploadFile.getSize() > filesize){
					request.setAttribute("uploadFileError", "* 上传大小不得超过5000KB");
					System.out.println("* 上传大小不得超过5000KB");
					return "useradd";
				}else if(prefix.equalsIgnoreCase("jpg")
						   || prefix.equalsIgnoreCase("png")
						   || prefix.equalsIgnoreCase("jpeg")
						   || prefix.equalsIgnoreCase("pneg")){
					//上传格式正确,重命名文件
					String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal.jpg";
					System.out.println("2.2 new fileName===>"+uploadFile.getName());
					//新建这么一个文件,FILE API
					File targetFile = new File(path,fileName); 
					if(!targetFile.exists()){
						targetFile.mkdirs();
					}
					//保存
					try{
						//上传
						uploadFile.transferTo(targetFile);
					}catch (Exception e){
						e.printStackTrace();
						request.setAttribute("uploadFileError", "* 上传失败! ");
						System.out.println("* 上传失败! ");
						return "useradd";
					}
					if(i==0){
						idPicPath = path+File.separator+fileName;
						log.info("2.3 idPicPath==>"+idPicPath);
					}else if(i==1){
						workPicPath = path+File.separator+fileName;
						log.info("2.4 workPicPath==>"+workPicPath);
					}
					
				}else{
					request.setAttribute("uploadFileError", "* 上传格式错误!");
					System.out.println("* 上传格式错误!");
					return "useradd";
				}
			}
		}
		if(flag){
			return "redirect:/user/userlist";
//			user.setCreatedBy(((User)session.getAttribute("user")).getId());
////			user.setCreationDate(new Date());
//			user.setIdPicPath(idPicPath);
//			user.setWorkPicPath(workPicPath);
//			if(userService.add(user)){
//				System.out.println("2.5 success.");
//				return "redirect:/user/userlist";
//			}
		}
		return "useradd";
	}

【5】运行结果:

打印日志:

2.1 uploadFile path ===>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles
2.2 new fileName===>uploadFile
18/02/02 16:31:45 INFO Controller.UserController: 2.3 idPicPath==>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles\1517561127316_Personal.jpg
2.2 new fileName===>uploadFile
18/02/02 16:31:45 INFO Controller.UserController: 2.4 workPicPath==>D:\java_ee_eclipse\mmb_workplace\.metadata\.plugins\org.eclipse.wst.server.core\tmp4\wtpwebapps\springmvc5\statics\uploadfiles\1517560634935_Personal.jpg

SpringMVC(24):使用springmvc+spring+jdbc 优化订单管理系统的示例(多文件上传功能的实现)
图4