
正文
SpringMVC 图片上传,检查图片大小
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
使用SpringMVC+Spring
前端提交图片文件到Controller,检查上传图片大小是否符合要求
直接上代码了
1.校验图片大小
这里提供出验证的方法,用于在需要校验的地方调用
/**
* 验证图片大小
*/
private Map<String,Object> validate(MultipartFile image) {
Map<String,Object> jsonMap = new HashMap<String,Object>();
//360*240 30k (长*宽 最大值)
if (!image.isEmpty()) {
try {
BufferedImage bi = ImageIO.read(image.getInputStream());
String standard = Constant.THUMBNAIL_SIZE; //Constant.THUMBNAIL_SIZE=360,240,30
String[] stand = standard.split(",");
if (bi.getWidth() > new Integer(stand[0])) {
jsonMap.put(Constant.ERROR_MSG,"缩略图宽度不能大于"+ stand[0] + "px");
}
if (bi.getHeight() > new Integer(stand[1])) {
jsonMap.put(Constant.ERROR_MSG,"缩略图高度不能大于"+ stand[1] + "px");
}
if (image.getSize() / 1024 > new Integer(stand[2])) {
jsonMap.put(Constant.ERROR_MSG,"缩略图大小不能大于"+ stand[2] + "K");
} } catch (IOException e) {
logger.error("图片验证时出现IOException异常!");
e.printStackTrace();
}
}
return jsonMap;
}
校验图片大小的方法
2.校验合格后,进行将图片上传到指定位置
这里提供Controller中用于接收请求的方法,这里方法合并在Controller里了。
/**
* 上传图片
* @throws IOException
* @throws IllegalStateException
*/
@RequestMapping("/uploadImg.do")
@ResponseBody
public Object uploadImg(MultipartFile thumbnail,HttpSession session) throws IllegalStateException, IOException{
Map<String,Object> jsonMap = new HashMap<String,Object>(); jsonMap = validate(thumbnail); //验证图片尺寸是否符合要求 if(jsonMap.get(Constant.ERROR_MSG) == null){ //图片格式符合要求 //获取存储文件的目录
//String path = session.getServletContext().getRealPath("/upload");
String path = Constant.UPLOAD_IMG_PATH;
//文件上传
if( !thumbnail.isEmpty() ){
//上传了文件
String fileName = thumbnail.getOriginalFilename();
//上传文件的限制, 一般先用扩展名做限制。 .jpg, .png
if( fileName.endsWith(".jpg") || fileName.endsWith(".png") || fileName.endsWith(".bmp") || fileName.endsWith(".jpeg") || fileName.endsWith(".gif")) {
//可以上传
//文件名的处理, 文件名在服务器是唯一的。 使用UUID类的方法的生成唯一值
String uuid = UUIDGenerator.getUUID(); //取出原来文件的扩展名
int pos = fileName.lastIndexOf("."); String extName = fileName.substring(pos); //组成完整的文件名称
String newFileName = uuid + extName; //把文件保存到服务器
File dest = new File(path,newFileName);
if (!dest.exists()) {
dest.mkdirs();
}
thumbnail.transferTo(dest); //文件访问路径
String urlImg = Constant.URL_PRE_IMG + newFileName;
//成功上传文件
jsonMap.put(Constant.SUCCESS, true);
jsonMap.put("thumbnail_url",urlImg); } else {
jsonMap.put(Constant.SUCCESS, false);
jsonMap.put(Constant.ERROR_MSG,"图片格式仅支持jpg|bmp|gif|jpeg|png");
logger.info("图片上传失败!!!!");
}
}
}else{
jsonMap.put(Constant.SUCCESS, false);
jsonMap.put(Constant.ERROR_MSG,"图片尺寸应该是360*240px 不能大于30K");
}
return jsonMap;
}
校验图片格式后,进行上传
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>







