图片尺寸判断等-我们到底能走多远系列(21)
我们到底能走多远系列(21)
扯淡:又是一年过年,给各位拜个很早很早的年,实在点的祝福:祝各位明年工资全部翻一番啦!
主题:
1,判断上传图片尺寸功能
如下代码即可在页面上结果掉这个问题:
var iconElement = $("#photo");var image = newImage(); image.src= iconElement.attr("src");var realWidth =image.width;var realHeight = image.height;
但是因为我后续代码中使用了截图的插件,导致插件无法正常使用。
被迫本人改变了流程:
点击file按钮-->选择图片-->onchange事件上传图片到后台-->后台判断图片尺寸-->返回结果
上传图片的js代码:根据msg的值来判断尺寸是否符合。
$.ajaxFileUpload({url:"uploadPreviewImage.html",secureuri:false,fileElementId:"advImage",dataType:"json",success:function(data , status) {if(data.msg=="1"){//后台检测尺寸不符合alert("图片大小小于480×520,无法进行裁剪");return;}},error:function(data, status, e) {//alert("图片上传失败,请重新选择图片"); }});
后台判断代码:代码中的实现是先把文件保存下来,然后利用BufferedImage 来判断尺寸,不符合删除。
其实可以在没有生成文件的时候直接进行判断尺寸,不符合就不用产生文件了。我这个是比较差的实现:
public ModelAndView uploadPreviewImage(HttpServletRequest request, HttpServletResponse response) throwsIOException{User user= (User)request.getSession().getAttribute("user");MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;MultipartFile image= multipartRequest.getFile("advImage");response.setCharacterEncoding(BusinessConstants.ENCOD_UTF);response.setHeader("ContentType", "json");PrintWriter out=response.getWriter();//组合零时图片名String imageName =image.getOriginalFilename();String file_ext= imageName.substring(imageName.lastIndexOf(BusinessConstants.DOT) + 1);SimpleDateFormat df= newSimpleDateFormat(BusinessConstants.DATE_FORMAT);String tempImageName= user.getId() +BusinessConstants.UNDERLINE + df.format(new Date()) + BusinessConstants.DOT +file_ext;//存放浏览图片的零时文件路径File file = new File(request.getSession().getServletContext().getRealPath(BusinessConstants.TEMP_PICTURE_PATH +tempImageName));byte[] advImageBytes = null;InputStream advImageStream= null;String msg= "0";try{file.createNewFile();advImageStream=image.getInputStream();advImageBytes=FileCopyUtils.copyToByteArray(advImageStream);FileCopyUtils.copy(advImageBytes, file);advImageStream.close();BufferedImage buff=ImageIO.read(file);//判断图片大小if(buff.getWidth() < 480 || buff.getHeight() < 520){msg="1";file.delete();}}catch(IOException e) {e.printStackTrace();}String tempPath= BusinessConstants.TEMP_RELATIVE_PICTURE_PATH +tempImageName;//传给页面相对路径out.print("{"); out.print("tempPath:'"+tempPath+"',"); out.print("msg:'"+msg+"'"); out.print("}");out.flush();out.close();//ajaxreturn null;}
上传利用的是ajaxupload插件,那么网上的朋友也有一些遇到过这种问题:就是文件上传后,file内的value就清空了,没有保留。
事实上,ajaxFileUpload没有使用ajax来实现文件上传,它只是利用iframe,局部刷新的方式来模拟ajax的效果,这样就可以理解路径内容没有保留了。
那么是不是我们在上传完后,把路径内容重新赋值给这file呢?理论上是可行的,但这个可能牵涉到浏览器的安全机制,个人觉得这样去做有点死胡同的感觉。
那么问题就是:onchange上传完文件 file标签是空的,体验上下降不少。结合上面的分析,比较好的做法就是在完成上传返回后,把file隐藏,显示上传成功。这样的方式很简单,也不用一直想着怎么把路径表现出来了。
至于页面上的file标签怎么隐藏,提示怎么显示:
可以利用jquery来操作:
$('#shopNameId').show();$('#batchshopNameId').hide();
效果这样:
上传前:
上传后:
点击重新上传后:
2,关于页面checkbox 多选的后操作的问题:
场景是:选中多个checkbox后,进行后台交互,比如删除这些几条数据什么的。
如何取得选中的checkbox的id数组呢?
一下是利用jquery完成的,但是牵涉到浏览器问题,所以看到这里的你,能否提供避开浏览器兼容问题的代码出来呢,谢谢啦。
var isIE=!!window.ActiveXObject;var isIE6=isIE&&!window.XMLHttpRequest;var list = newArray();if(isIE6){$("input[type=checkbox][name='chk_id'][checked]" ).each(function(i){list.push(this.id);})}else{$("input[type=checkbox][name='chk_id']").each(function(){if($(this).attr("checked") == true){list.push(this.id);}})}if(list.length<1){alert("请先选择批量修改的数据");return;}
3,下拉框联动问题:
页面上连个下拉框有联系,比如省市关系,行业大类小类
选择大类后小类的下拉框就内容就改变。
下拉框的代码:开始的时候大类给内容可选择,选择后出发js事件,用ajax去后台把对应的小类数据取出显示:
<select id="parentSelect" name="parentSelect" style="margin:0px 5px; height:20px; line-height:20px;"><c:forEach items="${industryList}" var="item" varStatus="status"><option id="${item.id }" value="${item.id }">${item.name }</option></c:forEach></select>小类<select id="childSelect" disabled="disabled" name="childSelect" style="margin:0px 5px;height:20px;line-height:20px;"></select>
出发事件的js:
$(document).ready(function(){$("#parentSelect").change(function(){var parentId = $(this).find("option:selected").attr("id");$.post("getChildIndustry.html",{parentId:$(this).find("option:selected").attr("id")},function(date){$("#childSelect").html('');$("#industry").html("");//这个其实是一个隐藏的div <div id="industry" style="display: none;"></div>$(date).appendTo('#industry');var childList = $("child");$.each(childList,function(key,val){var value =document.getElementById(val.id);var isChrome = window.navigator.userAgent.indexOf("Chrome") !== -1;varid;varname;if(isChrome){name=value.innerHTML;}else{name=value.str;}id=val.id;$('<option value=' + id + '>'+ name + '</option>').appendTo('#childSelect'); //添加下拉框$("#childSelect").attr('disabled', '') //2号下拉框可用 });});});
至于像页面上默认选中也是比较方便的。
总结:
1,有时候,代码打的快还不如方案选选得好。
2,js一旦牵涉到兼容问题就头大,看来页面的编码还真是一般人干不了的啊...
让我们继续前行
----------------------------------------------------------------------
努力不一定成功,但不努力肯定不会成功。
共勉。
转载于:https://www.cnblogs.com/killbug/archive/2013/01/29/2881267.html
图片尺寸判断等-我们到底能走多远系列(21)相关推荐
- Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)
我们到底能走多远系列(15) 扯淡:这些知识点来源是通过面试涉及到的,面的公司不多,知识点涉及也不多,我每次面试后都在备忘录里写下有用的东西,集合起来分享一下,因为是知识点,所以就不出什么面试题目啦. ...
- js中this和回调方法循环-我们到底能走多远系列(35)
我们到底能走多远系列(35) 扯淡: 13年最后一个月了,你们在13年初的计划实现了吗?还来得及吗? 请加油~ 主题: 最近一直在写js,遇到了几个问题,可能初入门的时候都会遇到吧,总结下. 例子: ...
- html5实现饼图和线图-我们到底能走多远系列(34)
我们到底能走多远系列(34) 扯淡: 送给各位一段话: 人生是一个不断做加法的过程 从赤条条无牵无挂的来 到学会荣辱羞耻 礼仪规范 再到赚取世间的名声 财富 地位 但是人生还要学会做减法 财富 ...
- 程序员在写作这条路上到底能走多远?
01 杨过这辈子什么时候最痛苦?被郭襄她姐砍掉了一只胳膊的时候,那时他身中情花之毒,活不了多久了,他最爱的姑姑又不辞而别:在这个时候,他想到的就是一个人偷偷地离开,做好了告别这个世界的准备. 我在什么 ...
- 网红经济到底能走多远?
网红经济是以一位年轻貌美的时尚达人为形象代表,以红人的品味和眼光为主导,进行选款和视觉推广,在社交媒体上聚集人气,依托庞大的粉丝群体进行定向营销,从而将粉丝转化为购买力的一个过程.n由于变现能力强大, ...
- 计算机在3d打印发挥的作用,七大优势汇总 看3D打印的路到底能走多远
[PConline 资讯]3D打印到底是什么?其实很多人都会认为它只不过是一种将二维喷墨或激光打印立体化的产品,很多人对于这多出的一个维度到底意味着什么概念比较模糊.先进的生产力一向都是经济发展不可或 ...
- 争议中的分销式社交电商能走多远?
争议中的分销式社交电商能走多远? 最近和几个做社群经济的大咖朋友聊天,都谈到今年火遍朋友圈的社交电商.社交电商到底有多火?据中商产业研究院<2018中国社交电商行业发展报告>显示,2018 ...
- java后端判断图片尺寸(GB,MB,KB形式),图片色彩(黑白照或彩色照片),图片构图(横图竖图方图)
1.判断图片尺寸,将字节大小转为GB,MB,KB形式 参数size-->File类的getsize()可以获取到文件的字节大小. 2.判断图片构图(横图竖图方图全景图(长大于宽的2.5倍为全景图 ...
- js判断图片尺寸及大小
技术框架:vue + antd-vue 代码: <a-upload name="file" :multiple="true" :showUploadLis ...
最新文章
- Linux中查看所有正在运行的进程
- 2018-2019-1 20165234 实验三 并发程序
- Linux修改主机名的两种方法
- Windows 11正式发布,所有用户均可免费升级,还支持安卓应用
- linux fedora35指定某个固定的启动项作为默认的启动项
- MailMail升级到1.0.2.4
- 超分辨率技术,随机噪声
- leetcode 加一
- gcc2.95.3安装过程
- 手动为linux系统添加新用户——过程详解
- CSDN出品,必是精品:CSDN浏览器助手!
- 这12款idea插件,能让你代码飞起来!
- Docker学习:容器之间单/双向通信 |--link /自定义网络实现互认容器别名 (理论篇)
- 台式电脑上为什么没有计算机,台式电脑怎么没有声音
- excel填充序列_猴哥讲述:excel的自动填充功能——自动填充单元格
- 用Sqldbx 连接Mysql
- FFmpeg入门详解之124:Qt5 FFmpeg单路网络摄像头采集预览
- Elasticsearch 索引别名应用
- 图像增强相关基础知识
- Linux的权限管理操作
热门文章
- 阿里开源mysql日志_使用过mysql的binlog吗?看看如何用binlog排查阿里开源项目otter的问题...
- python如何查看类信息_关于如何查看本地python类库详细信息的方法
- Android TableLayout
- C# 浏览器控件 谷歌、火狐内核
- C++教程:C++工程构建常用工具有哪些?
- C++基础教程之重载运算符和重载函数
- 开课吧Java课堂:如何将用户定义的类存储于Collection中
- HTML5中Audio使用踩坑汇总
- linux Centos下mysql安装
- QTableView修改数据后弹出是否保存的提示框。