SpringMVC 图片上传,检查图片大小
使用SpringMVC+Spring
前端提交图片文件到Controller,检查上传图片大小是否符合要求
直接上代码了
1.校验图片大小
这里提供出验证的方法,用于在需要校验的地方调用
1 /** 2 * 验证图片大小 3 */ 4 private Map<String,Object> validate(MultipartFile image) { 5 Map<String,Object> jsonMap = new HashMap<String,Object>(); 6 //360*240 30k (长*宽 最大值) 7 if (!image.isEmpty()) { 8 try { 9 BufferedImage bi = ImageIO.read(image.getInputStream()); 10 String standard = Constant.THUMBNAIL_SIZE; //Constant.THUMBNAIL_SIZE=360,240,30 11 String[] stand = standard.split(","); 12 if (bi.getWidth() > new Integer(stand[0])) { 13 jsonMap.put(Constant.ERROR_MSG,"缩略图宽度不能大于"+ stand[0] + "px"); 14 } 15 if (bi.getHeight() > new Integer(stand[1])) { 16 jsonMap.put(Constant.ERROR_MSG,"缩略图高度不能大于"+ stand[1] + "px"); 17 } 18 if (image.getSize() / 1024 > new Integer(stand[2])) { 19 jsonMap.put(Constant.ERROR_MSG,"缩略图大小不能大于"+ stand[2] + "K"); 20 } 21 22 } catch (IOException e) { 23 logger.error("图片验证时出现IOException异常!"); 24 e.printStackTrace(); 25 } 26 } 27 return jsonMap; 28 }
2.校验合格后,进行将图片上传到指定位置
这里提供Controller中用于接收请求的方法,这里方法合并在Controller里了。
1 /** 2 * 上传图片 3 * @throws IOException 4 * @throws IllegalStateException 5 */ 6 @RequestMapping("/uploadImg.do") 7 @ResponseBody 8 public Object uploadImg(MultipartFile thumbnail,HttpSession session) throws IllegalStateException, IOException{ 9 Map<String,Object> jsonMap = new HashMap<String,Object>(); 10 11 jsonMap = validate(thumbnail); //验证图片尺寸是否符合要求 12 13 if(jsonMap.get(Constant.ERROR_MSG) == null){ //图片格式符合要求 14 15 //获取存储文件的目录 16 //String path = session.getServletContext().getRealPath("/upload"); 17 String path = Constant.UPLOAD_IMG_PATH; 18 //文件上传 19 if( !thumbnail.isEmpty() ){ 20 //上传了文件 21 String fileName = thumbnail.getOriginalFilename(); 22 //上传文件的限制, 一般先用扩展名做限制。 .jpg, .png 23 if( fileName.endsWith(".jpg") || fileName.endsWith(".png") || fileName.endsWith(".bmp") || fileName.endsWith(".jpeg") || fileName.endsWith(".gif")) { 24 //可以上传 25 //文件名的处理, 文件名在服务器是唯一的。 使用UUID类的方法的生成唯一值 26 String uuid = UUIDGenerator.getUUID(); 27 28 //取出原来文件的扩展名 29 int pos = fileName.lastIndexOf("."); 30 31 String extName = fileName.substring(pos); 32 33 //组成完整的文件名称 34 String newFileName = uuid + extName; 35 36 //把文件保存到服务器 37 File dest = new File(path,newFileName); 38 if (!dest.exists()) { 39 dest.mkdirs(); 40 } 41 thumbnail.transferTo(dest); 42 43 //文件访问路径 44 String urlImg = Constant.URL_PRE_IMG + newFileName; 45 //成功上传文件 46 jsonMap.put(Constant.SUCCESS, true); 47 jsonMap.put("thumbnail_url",urlImg); 48 49 } else { 50 jsonMap.put(Constant.SUCCESS, false); 51 jsonMap.put(Constant.ERROR_MSG,"图片格式仅支持jpg|bmp|gif|jpeg|png"); 52 logger.info("图片上传失败!!!!"); 53 } 54 } 55 }else{ 56 jsonMap.put(Constant.SUCCESS, false); 57 jsonMap.put(Constant.ERROR_MSG,"图片尺寸应该是360*240px 不能大于30K"); 58 } 59 return jsonMap; 60 }
3.依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>