关于项目中上传图片时图片尺寸和大小的判断问题

关于项目中上传图片时图片尺寸和大小的判断问题


获取页面中图片的尺寸有以下2种思路:

1,在前台页面,通过JS获取;

2,在后台通过文件流获取;


首先来看第一种,在前台页面中获取,首先谷歌浏览器是没有问题的,可以获取到图片的尺寸,无论是页面加载完成后显示的图片,还是JS生成的图片,比如预览图片。但是IE浏览器只能获取到页面加载完成以后显示的图片,没法获取到预览图片的尺寸。这个主要是IE浏览器的为了安全性考虑的。

优点:在前台通过JS获取,减轻服务器压力;

缺点:浏览器兼容性问题、存在被攻击的风险,安全性不如后台;


通过项目中实践,建议采用第二种思路,也就是在后台通过文件流获取图片的宽高和大小。

优点:不存在浏览器兼容性问题;

缺点:服务器端校验,增加了服务器端的压力;


示例代码:


InputStream fileIs	=	null;
if(fileIs != null){
	ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
	InputStream inputStream = null;
	try {
		byte[] buffer = new byte[1024];
		int len;
		while ((len = fileIs.read(buffer)) > -1 ) {
			byteArrayOutputStream.write(buffer, 0, len);
		}
		baos.flush();
		inputStream = new ByteArrayInputStream(baos.toByteArray());
		BufferedImage buff;
		buff = ImageIO.read(inputStream);
		int width  = buff.getWidth();    //获取上传图片的宽度
		int height = buff.getWidth();    //获取上传图片的高度
		int newwidth = 0;
		if(!"".equals(dbmimgwidth) && dbmimgwidth != ""){
			newwidth = Integer.parseInt(dbmimgwidth); //获取页面中的图片的宽度
		}
   		if(0 != newwidth && newwidth != width){
   			throw new NewException("图片宽度不一致!!!");
   		}
   		fileIs = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
	} catch (IOException e) {
		logger.error("获取图片宽度和高度失败.......");
		throw new NewException("获取图片宽度和高度失败,保存失败!");
	}finally{
		try {
			if(inputStream != null){
				inputStream.close();
			}
			byteArrayOutputStream.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


根据以往的项目经验,图片的尺寸和大小的控制,最好选择在后台,通过文件流操作来获取,这样可以有效避免浏览器的兼容性问题和安全性问题。以上仅为一家之言,仅供参考,如有不对之处,请多包含。


分享一首刘禹锡的诗:《闻乐天扬州初逢席上见赠》

巴山蜀水凄凉地,二十三年弃置身。

怀旧空吟闻笛赋,到乡翻似烂柯人。

沉舟侧畔千帆过,病树前头万木春。

今日听君歌一曲,暂凭杯酒长精神。



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值