web工程上传图标验证尺寸(高、宽)

需求描述:要做图标上传,限制大小18*18。

遇到问题:

1、最开始想用js判断图片的尺寸,不想把文件上传到服务端后再判断尺寸。最开始找到了方法并在html页面中测试通过(IE7、8、9)。但是将静态页面拷贝到spring mvc架构下的web工程中就有问题,一直获取不到图标的高宽。怀疑是spring mvc哪里配置影响到了。

2、后来没办法,只好将文件上传到服务端进行验证。用ajaxFileUpload插件异步上传,在选择文件的时候直接判断,并提示用户。但是这种方法有一个问题,文件上传后,原来的file域内容会被清空,不能二次上传。网上说的修改ajaxFileUpload.js源文件,将

var newElement = $(oldElement).clone(); 改为
var newElement = oldElement.clone(true); 

是行不通的。因为IE有安全限制,不能通过代码对file域赋值,所以clone方法不会将选择的路径复制。复制不成功也就没办法在保存功能将图标再次上传到服务端。

3、ajaxFileUpload也淘汰,最后改为jquery的表单异步提交方式进行验证。

思路如下:添加file域的change事件,提交表单,在后台获取图标,并判断图标是否符合规格。



代码如下:

通过js判断图标尺寸方法如下,IE7、8、9亲测通过,但是将代码拷贝到spring mvc架构下的web工程中,就有问题,暂时不知道问题在哪里,怀疑是spring mvc哪里配置问题。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<script type="text/javascript">
	
	function checkSize() {
		var obj = document.getElementById("content");
		var img = null;  
		img = document.getElementById("test"); 
		//document.body.insertAdjacentElement("beforeend",img); 
		//img.style.visibility="hidden";   
		img.src = obj.value; alert(img.src);
		var imgwidth = img.offsetWidth;  
		var imgheight = img.offsetHeight;
		alert(imgwidth + ":" + imgheight);  
	}
	
</script>

<body>

<form>

	<input type="file" id="content" name="content" οnchange="checkSize()" />
    <img id="test" name="test" src="" />
	<input type="button" id="btn" name="btn" value="检测图标大小" οnclick="checkSize();" />
</form>

</body>
</html>


通过表单异步提交方式代码如下:

html代码如下,增加file域的onchange事件:

<input type="file" id="logocontent" name="logocontent" οnchange="checkLogo(false);" />

js代码如下,需要引入jquery基础包、jquery easyui包、jquery.json包:
/*
	* 检测图标大小是否是18*18,将图标通过异步方式上传到服务端进行判断
	* 符合要求返回true,不符合返回false
	* @param isSubmit 是否需要提交表单,true需要,false不需要
	*/
function checkLogo(isSubmit) {
		$("#editForm").form("submit", {
			url: "后台url地址",
			success: function(data) {
				var ret = $.parseJSON(data);// 返回是json格式字符串,格式化成json对象
				checkFlag = ret.isLogoSizeOk; //验证成功isLogoSizeOk值为true,不成功为false
				if (checkFlag == false) {
					alert(ret.msg);
				} else {
					if (isSubmit) {
						formSubmit();
					}
				}
				
			}
		});
}

服务端java代码如下:

/**
	 * 判断图标是否符合指定的大小尺寸,width和height由页面传过来
	 * 符合返回true,不符合返回false
	 * 返回值为json对象字符串,key为isLogoSizeOk
	 * @param file
	 * @param request
	 * @param response
	 */
	@RequestMapping(value = "/checkLogoSize")
	public void checkLogoSize(@RequestParam("logocontent") MultipartFile[] file, HttpServletRequest request,
			HttpServletResponse response) {
		
		JSONObject retJSON = new JSONObject();
		String checkHeight = StringHelper.checkNull(request.getParameter("checkHeight"), Constant.APP_LOGO_HEIGHT);
		String checkWidth = StringHelper.checkNull(request.getParameter("checkWidth"), Constant.APP_LOGO_WIDTH);
		boolean isLogoSizeOk = true;
		String msg = "";
		if (file != null
				& file.length > 0) {
			MultipartFile logoFile = file[0];
			InputStream logoIn = null;
			try {
				logoIn = logoFile.getInputStream();
				BufferedImage bufferImage = ImageIO.read(logoIn);
				if (bufferImage != null) {
					if (!String.valueOf(bufferImage.getWidth()).equals(checkWidth)
							|| !String.valueOf(bufferImage.getHeight()).equals(checkHeight)) {
						isLogoSizeOk = false;
						msg = "请上传" + checkWidth + "*" + checkHeight + "规格的图标!";
			        }
				} else {
					isLogoSizeOk = false;
					msg = "请上传格式为jpg、png、gif等正确格式的图标!";
				}
		        
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (logoIn != null) {
					try {
						logoIn.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}
		
		retJSON.put("isLogoSizeOk", isLogoSizeOk);
		retJSON.put("msg", msg);
		
		try {
			response.setContentType(Constant.CONTENT_TYPE);
			response.setCharacterEncoding(Constant.CHARTSET_UTF8);
			response.getWriter().write(retJSON.toJSONString());
		} catch (Exception e) {
			log.error(ExceptionUtils.getStackTrace(e));
		}
		
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
-ui.admin v3.0 遵循 CC BY 3.0协议,将永久性提供无偿服务。 如果想做皮肤定制,只需要将skin文件下的任意一个批复文件复制出来一份进行修改就行。 H-ui一直秉承“不求多炫,实用为主!”的宗旨,为广大工程师提供最实用,最易用的前代码。 如果您有项目也在使用H-ui.admin,请保留网站后台底部版权信息,谢谢! 您可以联系作者,以便在此展现案例,也为您的品牌推广尽一些绵薄之力。 --------------用心做站,做不一样的站-------------- ========================================================== \根目录 ├── _blank.html 空白页(每次我们都拿空白页去创建,这样比较干净!) ├── _footer.html 页脚公共代码片段 ├── _header.html 头部公共代码片段 ├── _meta.html meta公共代码片段 ├── robots.txt 搜索引擎爬虫配置文件 ├── login.html 管理员登陆 ├── index.html 首页(主框架) ├── welcome.html 我的桌面(默认永远打开的页面) ├── member-开头的 用户相关 ├── artice-开头的 资讯相关 ├── picture-开头的 图片相关 ├── product-开头的 产品相关 ├── page-开头的 页面相关 ├── system-开头的 系统相关 ├── admin-开头的 管理员相关 ├── charts-开头的 统计相关 …… static/ 资源 ├── h-ui/ H-ui特有资源 │ ├── css/ 样式 │ │ ├── H-ui.css H-ui基础样式 │ │ ├── H-ui.min.css H-ui.css 压缩版 │ │ ├── H-ui.ie.css H-ui.css IE低版本兼容补丁 │ ├── images/ 图片资源 │ ├── js/ │ │ ├── H-ui.js H-ui核心脚本 ├── h-ui.admin/ H-ui.admin核心资源 │ ├── css/ 样式 │ │ ├── H-ui.login.css 后台管理员登录页样式 │ │ ├── H-ui.admin.css 后台界面主要样式 │ ├── images/ 图片资源 │ ├── js/ │ │ ├── H-ui.admin.js 后台管理核心脚本 │ ├── skin/ 皮肤资源 │ │ ├── blue 蓝色 │ │ ├── default 黑色(默认) │ │ ├── green 绿色 │ │ ├── orange 橙色 │ │ ├── red 红色 │ │ ├── yellow 黄色 Lib/ 第三方插件 ├── jquery jQuery类库(v1.9.1) ├── Hui-iconfont 阿里图标字体库(H-ui定制) ├── jquery.SuperSlide 幻灯片组件 ├── Validform 表单验证插件 ├── jquery.validation 表单验证插件 ├── My97DatePicker 日期插件 ├── datatables 表格插件 ├── nprogress 进度条插件 ├── layer layer弹出层插件 ├── laypage laypage 翻页插件 ├── jquery.contextmenu 右键菜单插件 ├── ueditor 百度编辑器 ├── Highcharts 图表插件 ├── echarts 百度图标插件 ├── datatables 表格排序,检索插件 ├── WebUploader 百度文件上传组件 ├── lightbox2 图片预览组件 ├── html5shiv.js html5插件,让低版本IE支持html5元素 ├── DD_belatedPNG_0.0.8a-min.js 解决IE6png透明 ├── swfobject.js Flash插件 ├── expressInstall.swf 检查flash插件 ├── respond.min.js 让IE兼容media ├── colpick.js 颜色插件 └─temp 测试数据、图片

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值