js判断上传图片的文件大小,和宽高尺寸

今天在做图片上传的小功能,使用了一个kissy上传组件。很好奇它是如何在图片上传前,检测到图片的大小和尺寸的?我们来写个小实例实现一下吧

如何读取图片的size

首先,原生input file控件有个files属性,该属性是一个数组。数组中的元素有以下属性:lastModifiedDate,name,size,type,webkitRelativePath,如图:

这样的话,我们就可以检测到size。

var fileData = file.files[0];
var size = fileData.size;   //注意,这里读到的是字节数
var isAllow = false;
var maxSize = Max_Size;
maxSize = maxSize * 1024;   //转化为字节
isAllow = size <= maxSize;

– 兼容性:ie9下读不到input file.files这个属性。思考:怎么办?

如何读取图片的width,height

  • 图片真实的宽度和高度,可以通过实例化Image对象、加载src 来获取。
  • 兼容性:IE下使用滤镜来处理图片尺寸控制

全部代码

  1 <html>
  2 <head>
  3     <title>测试</title>
  4     <meta charset="utf-8"/>
  5     <link rel="stylesheet" href="http://g.tbcdn.cn/tb/global/2.9.1/global-min.css">
  6     <script src="http://g.tbcdn.cn/??kissy/k/1.4.2/seed-min.js"></script>
  7 </head>
  8 <body>
  9
 10 <form action="" method="post">
 11     <input type="file" id="uploader"/>
 12     <input type="submit" id="submit"/>
 13 </form>
 14 <div id="tip1"></div>
 15 <div id="tip2"></div>
 16 <script>
 17
 18     //http://www.oschina.net/code/snippet_819257_22844
 19     //https://github.com/kissygalleryteam/uploader/blob/master/3.0.1/build/plugins/auth/auth.js
 20     KISSY.use(‘core‘,function(S){
 21         var $ = S.all, D = S.DOM;
 22         var Max_Size = 2000; //2M
 23         var Max_Width = 100; //100px
 24         var Max_Height = 200; //200px
 25
 26         $(‘#submit‘).on(‘click‘,function(ev){
 27             ev.halt();
 28             var fileEl = D.get(‘#uploader‘);
 29
 30             console.log(fileEl.files);
 31
 32             testMaxSize(fileEl);
 33             testWidthHeight(fileEl);
 34         })
 35
 36         function testMaxSize(file){
 37             if(file.files && file.files[0]){
 38                 var fileData = file.files[0];
 39
 40                 var size = fileData.size;   //注意,这里读到的是字节数
 41                 var isAllow = false;
 42                 if(!size) isAllow = false;
 43
 44                 var maxSize = Max_Size;
 45                 maxSize = maxSize * 1024;   //转化为字节
 46                 isAllow = size <= maxSize;
 47
 48                 showTip1(isAllow);
 49
 50             }else{
 51                 /*... ie9下用iframe上传*/
 52                 /*
 53                 // 或者用以面的方式实现
 54                 // var img = new Image();
 55                 // 再用img.src=filepath,再用img.fileSize用取,这里不写啦,读者自行实践一下
 56                 */
 57
 58             }
 59
 60         }
 61
 62         function testWidthHeight(file){
 63             var isAllow = false;
 64             debugger;
 65
 66             if(file.files && file.files[0]){
 67                 var fileData = file.files[0];
 68
 69                 //读取图片数据
 70                 var reader = new FileReader();
 71                 reader.onload = function (e) {
 72                     var data = e.target.result;
 73                     //加载图片获取图片真实宽度和高度
 74                     var image = new Image();
 75                     image.onload=function(){
 76                         var width = image.width;
 77                         var height = image.height;
 78                         isAllow = width >= Max_Width && height >= Max_Height;
 79                         showTip2(isAllow);
 80                     };
 81                     image.src= data;
 82                 };
 83                 reader.readAsDataURL(fileData);
 84
 85             }else{
 86                 //IE下使用滤镜来处理图片尺寸控制
 87                 //文件name中IE下是完整的图片本地路径
 88                 var input = D.get(‘#uploader‘);
 89                 //var input = uploader.get(‘target‘).all(‘input‘).getDOMNode();
 90                 input.select();
 91                 //确保IE9下,不会出现因为安全问题导致无法访问
 92                 input.blur();
 93                 var src = document.selection.createRange().text;
 94                 var img = $(‘<img style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=image);width:300px;visibility:hidden;"  />‘).appendTo(‘body‘).getDOMNode();
 95                 img.filters.item(‘DXImageTransform.Microsoft.AlphaImageLoader‘).src = src;
 96                 var width = img.offsetWidth;
 97                 var height = img.offsetHeight;
 98                 $(img).remove();
 99
100                 isAllow = width >= Max_Width && height >= Max_Height;
101                 showTip2(isAllow);
102             }
103
104         }
105
106         function showTip1(isAllow){
107             var tipEl = D.get(‘#tip1‘),
108                     html = ‘‘;
109             if(isAllow){
110                 html = ‘大小通过</br>‘;
111             }else{
112                 html = ‘大小未通过,要求‘+ Max_Size +‘</br>‘;
113             }
114             D.html(tipEl,html);
115         }
116
117         function showTip2(isAllow){
118             var tipEl = D.get(‘#tip2‘),
119                     html = ‘‘;
120
121             if(isAllow){
122                 html += ‘宽高通过‘;
123             }else{
124                 html += ‘宽高未通过,要求width:‘+ Max_Width +‘, height:‘+ Max_Height;
125             }
126             D.html(tipEl,html);
127         }
128
129
130     })
131
132 </script>
133 </body>
134 </html>

相关文章:

kissy uploader组件的有关校验的 源码地址:https://github.com/kissygalleryteam/uploader/blob/master/3.0.1/build/plugins/auth/auth.js

http://www.oschina.net/code/snippet_1242747_23669

http://www.oschina.net/code/snippet_819257_22844

时间: 2024-07-31 04:27:10

js判断上传图片的文件大小,和宽高尺寸的相关文章

js判断上传文件大小

<!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-typ

兼容各浏览器的js判断上传文件大小

由于项目需要,在网上找了一个JS判断上传文件大小的程序,经测试兼容IE6-9,Firefox10,Opera11.6,safari5.1,chrome17 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>js判断上传文件的大小</titl

前端 JS 获取 Image 图像 宽高 尺寸

前端 JS 获取 Image 图像 宽高 尺寸 简介 项目中用到获取图片的原始尺寸,然后适配宽高:网上的大部分前端解决方案,都是new Image()后,在onload事件中获取image的尺寸. 在图片数量较多的时候,这样的获取效率实在是低下.所有就有了这篇文章.通过直接读取解析文件的字节码来获取图片的尺寸. IMAGE_HEAD_SIGS var IMAGE_HEAD_SIGS = { GIF: [0x47, 0x49, 0x46], //'G' 'I' 'F' ascii PNG: [0x

js和jquery中的各种宽高

js里面的宽度太多了,一大堆的,的确需要好好的整理总结一下,不然自己就是一个乱的. 先看看window下面的宽高 1--  window.outerWidth      window.outerHeight 2--  window.innerWidth      window.innerHeight <script type="text/javascript"> console.log(window.outerWidth) console.log(window.outerH

js获取屏幕(设备)宽高

平常获取设备的宽高无非就那几 <script language="javascript"> var h = ""; h += " 网页可见区域宽:"+ document.body.clientWidth; h += " 网页可见区域高:"+ document.body.clientHeight; h += " 网页可见区域宽:"+ document.body.offsetWidth +"

JS获取浏览器中的各种宽高值

width: clientWidth:对象实际内容的宽度,不包含边线,最大不超过视口宽度 offsetWidth:对象实际宽度,包含边线,最大不超过视口宽度 scrollWidth:对象实际宽度,不包含边线,可超过视口宽度 height:(都可超过视口高度) clientHeight:对象实际内容的高度,不包含边线 offsetHeight:对象实际高度,包含边线 scrollHeight:对象实际高度,不包含边线.如果对象为body,大于视口时为实际高度,小于视口时为视口高度 分辨率宽高: w

JS获取盒模型对应的宽高

## 获取内联样式宽高 只能获取内联设置的样式,在style或者.css文件中设置的无法获取 1 let div = document.querySelect('.test'); 2 let width = div.style.width 3 let height = div.style.height ## currentStyle和getComputedStyle获取所有样式 两者只能获取样式,不能设置样式 let div = document.querySelect('.test'); le

微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题

以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx.canvasToTempFilePath wx.saveFile 官方文档中只有一行,真是坑爹啊,原来 wx.canvasToTempFilePath参数为一个对象包括canvasID,success,fail,complete,和wx.saveFile差不多: wx.canvasToTempFi

js判断上传图片宽高及文件大小

<input id="file" type="file"> <input id="Button1" type="button" value="button" onclick="check()"> window.check=function(){ var input = document.getElementById("file"); if(in