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

来源:互联网 发布:投资数据库终端 编辑:程序博客网 时间:2024/06/09 18:22

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


获取页面中图片的尺寸有以下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 0