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>
SpringMVC 图片上传,检查图片大小的更多相关文章
- 在线HTML文档编辑器使用入门之图片上传与图片管理的实现
在线HTML文档编辑器使用入门之图片上传与图片管理的实现: 官方网址: http://kindeditor.net/demo.php 开发步骤: 1.开发中只需要导入选中的文件(通常在 webapp ...
- KindEditor 修改多图片上传显示限制大小和张数
在使用KindEditor的时候用到多图片上传时,提示有最多上传20张图片,单张图片容量不超过1MB: 修改的文件的地方在:kindeditor\plugins\multiimage\multiima ...
- ssm使用Ajax的formData进行异步图片上传返回图片路径,并限制格式和大小
之前整理过SSM的文件上传,这次直接用代码了. 前台页面和js //form表单 <form id= "uploadForm" enctype="multipart ...
- IOS 图片上传处理 图片压缩 图片处理
- (void)initActionSheet { UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil dele ...
- easyui+webuploader+ckeditor实现插件式多图片上传-添加图片权限(图片上传人是谁,只能看到自己的图片)
需求: 实现过程及思路 1.先页面布局 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=" ...
- 解决uploadify多图片上传部分图片丢失,且不提示任何错误的问题
这两天用到uploadify的flash版本进行批量图片上传并生成缩略图的功能,之前用uploadify用的好好的,这次突然出现了一个奇怪的问题. 问题描述如下:当我选择单个图片上传的时候,图片上传都 ...
- 图片上传-本地图片转base64+ie8支持+本地预览支持
最近项目由于flash同学没在了,图片上传只能前端重新做,后台希望用base64数据上传,复用之前接口 问题来了, 1.ie8 不支持canvas转base64 2.本地预览 base64数据,ie8 ...
- 推荐ajaxfilemanager for tiny_mce 比较完善的tiny_mce编辑器的图片上传及图片管理插件PHP版 支持中文
tiny_mce编辑器,我觉得挺简洁.好用的,但就是图片上传的插件是收费的,而且网上找了半天也没有找到开源好用的上传插件. 不过功夫不负有心人,终于还就被我找到一款相当满意的插件. 这个插件的名字叫a ...
- django图片上传修改图片名称
storage.py # 给上传的图片重命名 from django.core.files.storage import FileSystemStorage from django.http impo ...
- 图片上传,图片剪切jquery.imgareaselect
---恢复内容开始--- <%@ page language="java" contentType="text/html; charset=UTF-8" ...
随机推荐
- FatFs文件系统的移植
FatFs 的底层可以写一次命令,读写多个扇区.FatFs的设计的读写的思想就很好,小块的数据,我就经过Buffer来存储,大块的数据,我就直接进行存取,那样速度,效率高了很多,看图: FatFs文件 ...
- varchar2长度的意义
参考:http://www.cnblogs.com/vipcjob/archive/2010/06/08/1754075.html http://www.itpub.net/thread-732714 ...
- Dubbo,Zookeeper入门
Zookeeper 功能:分布式应用程序协调服务,集群管理者,监视集群各个节点状态-->提交反馈-->进行下一步合理操作: 机制:目录方式,当目录节点发生变化(数据改变,被删除,子节点增加 ...
- SpringBoot------自定义Logback日志
帮助文档: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-featur ...
- TIJ -- CountDownLatch
1. 2. Class : CountDownLatchDemo package lime.thinkingInJava._021._007._001; import java.sql.Time; i ...
- 从头配置,开发 cocos2dx 3.14.1
要使用cocos2dx写一个麻将测试工具. 配置流程如下: 1. 下载安装最新版本的VS(VS2017): https://www.visualstudio.com/zh-hans/downloads ...
- 【分布式系列】session跨域及单点登录解决方案
Cookie机制 Cookie技术是客户端的解决方案,Cookie就是由服务器发给客户端的特殊信息,而这些信息以文本文件的方式存放在客户端,然后客户端每次向服务器发送请求的时候都会带上这些特殊的信息. ...
- 宣布推出针对 Microsoft OneDrive 和 SharePoint 的 Autodesk AutoCAD 新集成
在 OneDrive 和 SharePoint,我们的愿景是随时随地为你的团队提供简单而安全的文件访问.无论你的职位.专业或行业是什么,我们将始终致力于扩展和连接你最重视的内容.今天,我们发布了与 A ...
- Python读取一个目录下的所有文件
#!/usr/bin/python # -*- coding:utf8 -*- import os allFileNum = 0 def printPath(level, path): global ...
- 使用redis接管session
class RedisSession { // 默认配置名称(使用load_config加载) private $_default_config_path = 'package/cache/redis ...