图片上传js验证图片长宽_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下使用滤镜来处理图片尺寸控制

全部代码:

测试

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

//https://github.com/kissygalleryteam/uploader/blob/master/3.0.1/build/plugins/auth/auth.js

KISSY.use('core',function(S){

var $ = S.all, D = S.DOM;

var Max_Size = 2000; //2M

var Max_Width = 100; //100px

var Max_Height = 200; //200px

$('#submit').on('click',function(ev){

ev.halt();

var fileEl = D.get('#uploader');

console.log(fileEl.files);

testMaxSize(fileEl);

testWidthHeight(fileEl);

})

function testMaxSize(file){

if(file.files && file.files[0]){

var fileData = file.files[0];

var size = fileData.size; //注意,这里读到的是字节数

var isAllow = false;

if(!size) isAllow = false;

var maxSize = Max_Size;

maxSize = maxSize * 1024; //转化为字节

isAllow = size <= maxSize;

showTip1(isAllow);

}else{

/*... ie9下用iframe上传*/

/*

// 或者用以面的方式实现

// var img = new Image();

// 再用img.src=filepath,再用img.fileSize用取,这里不写啦,读者自行实践一下

*/

}

}

function testWidthHeight(file){

var isAllow = false;

debugger;

if(file.files && file.files[0]){

var fileData = file.files[0];

//读取图片数据

var reader = new FileReader();

reader.onload = function (e) {

var data = e.target.result;

//加载图片获取图片真实宽度和高度

var image = new Image();

image.οnlοad=function(){

var width = image.width;

var height = image.height;

isAllow = width >= Max_Width && height >= Max_Height;

showTip2(isAllow);

};

image.src= data;

};

reader.readAsDataURL(fileData);

}else{

//IE下使用滤镜来处理图片尺寸控制

//文件name中IE下是完整的图片本地路径

var input = D.get('#uploader');

//var input = uploader.get('target').all('input').getDOMNode();

input.select();

//确保IE9下,不会出现因为安全问题导致无法访问

input.blur();

var src = document.selection.createRange().text;

var img = $('').appendTo('body').getDOMNode();

img.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src = src;

var width = img.offsetWidth;

var height = img.offsetHeight;

$(img).remove();

isAllow = width >= Max_Width && height >= Max_Height;

showTip2(isAllow);

}

}

function showTip1(isAllow){

var tipEl = D.get('#tip1'),

html = '';

if(isAllow){

html = '大小通过';

}else{

html = '大小未通过,要求'+ Max_Size +'';

}

D.html(tipEl,html);

}

function showTip2(isAllow){

var tipEl = D.get('#tip2'),

html = '';

if(isAllow){

html += '宽高通过';

}else{

html += '宽高未通过,要求width:'+ Max_Width +', height:'+ Max_Height;

}

D.html(tipEl,html);

}

})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

必填校验加变色,点击颜色消失

必填校验加变色&#xff0c;点击颜色消失1.例子 <td changeColorForNull"ah0"><input class"noNull" type"text" id"ah0"name"ah" notNull"案号" onfocus"myFocus(this)" value"" …

一个关于python装饰器参数的问题

看到廖雪峰python教程上&#xff0c;python装饰器一章 https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000 在最后的作业题上 再思考一下能否写出一个log的decorator&#xff0c;使它既…

action怎么获得 ajax date参数_ajax()gt;load()事件的新用法!!!

load()函数用于从服务器加载数据&#xff0c;并使用返回的html内容替换当前匹配元素的内容。load()函数默认使用GET方式&#xff0c;如果提供了对象形式的数据&#xff0c;则自动转为POST方式。load()函数只会替换每个匹配元素的内部内容(innerHTML)。你还可以在URL字符串后面追…

apache shiro_Apache Shiro第1部分–基础

apache shiroApache Shiro &#xff08;最初称为JSecurity&#xff09;是Java安全框架。 它被接受并于2010年成为Apache顶级项目。它的目标是功能强大且易于使用。 该项目正在积极开发中&#xff0c;用户和开发人员的邮件列表均处于活动状态。 最重要的区域记录在其网页上。 但…

js编码解码

js编码解码//对输出结果编码 function encodeStr(val) {return encodeURIComponent(encodeURIComponent(trim(val))); }// 对参数解码 function decodeStr(val) {return decodeURIComponent(decodeURIComponent(trim(val))); }后端解码 public static String urlDecode(String …

PHP 中文文件名 空格等 CURL 读取

用rawurlencode 对文件名进行编码转载于:https://www.cnblogs.com/zhaoyun4122/p/7198895.html

无显示器u盘安装centos_最新版 CentOS 8.1.1911 安装教程及常见问题图文详解

基于笔记本(华硕)操作&#xff0c;使用软碟通(UltraISO)制作的系统启动盘(U盘&#xff0c;内存大于8G)操作可自行百度&#xff0c;非常简单(或可留言&#xff0c;择情况出一期U盘制作启动盘教程)。a、登录 centos 官网下载镜像文件官网地址&#xff1a;https://www.centos.org阿…

谨慎使用JUnit的预期异常

有时&#xff0c;当我们收到对jOOQ或其他库的拉取请求时&#xff0c;人们会将单元测试中的代码更改为更“惯用的JUnit”。 特别是&#xff0c;这意味着他们倾向于更改此代码&#xff08;公认的不是那么漂亮的代码&#xff09;&#xff1a; Test public void testValueOfIntInv…

plupload使用例子

plupload使用例子1. 例子 <li><a id"uploadFile">上传</a></li>//文书上传和显示 $(function () {var uploader new plupload.Uploader({runtimes: html5,flash,silverlight,html4,// 指定上传方式browse_button: uploadFile,unique_names…

mysql获取相隔时间段的数据

思路&#xff1a;为时间段内的数据进行编序号&#xff0c;然后计算好相隔时间&#xff0c;拿到id作为搜索条件 SELECT * FROM ( SELECT (i:i1) as i, id, data_send_time FROM jl_pims_machine_time mt,(select i:0) as it where mt.company_id 1001 AND mt.machine_id 1 ord…

bom实现方块移动_从0开始实现一个俄罗斯方块

写在前面得话&#xff1a;这篇文章主要记录了我是怎么一步一步写出俄罗斯方块&#xff0c;整个代码用的函数编程&#xff0c;主要是为了让一些不熟悉es6, 面向对象写法得 新手能更容易看明白&#xff0c;全部得代码中都是一些js的基础知识&#xff0c;很容易理解。要说有点麻烦…

字符串工具类

字符串工具类import javax.servlet.http.HttpServletRequest; import java.util.UUID;public class CommonUtil {/*** param request 请求* return java.lang.String 返回路径* description 获取绝对路径* date 2021/7/14 20:45*/public static String getUrlPath(HttpServletR…

JSonP跨域请求

JSonP跨域请求 我们在通过自己的页面或程序通过ajax请求其它网站或服务时&#xff0c;会存在一个ajax直接请求普通文件存在跨域无权限访问的问题&#xff0c;甭管你是静态页面、动态网页、web服务、WCF&#xff0c;只要是跨域请求&#xff0c;一律不准。不过我们又发现&#xf…

cli3解决 ie11语法错误 vue_基于 Vue + Koa2 + MongoDB + Redis 实现一个完整的登录注册...

项目地址&#xff1a;https://github.com/caochangkui/vue-element-responsive-demo/tree/login-register通过 vue-cli3.0 Element 构建项目前端&#xff0c;Node.js Koa2 MongoDB Redis 实现数据库和接口设计&#xff0c;包括邮箱验证码、用户注册、用户登录、查看删除用户…

gwt 嵌入html_GWT和HTML5画布演示

gwt 嵌入html这是我对GWT和HTML5 Canvas的第一个实验。 我的第一个尝试是创建矩形&#xff0c;仅用几行代码就得出了这样的内容&#xff1a; 码&#xff1a; public class GwtHtml5 implements EntryPoint {static final String canvasHolderId "canvasholder";sta…

使用UIWebView载入本地或远程server上的网页

大家都知道&#xff0c;使用UIWebView载入本地或远程server上的网页&#xff0c;sdk提供了三个载入接口&#xff1a;- (void)loadRequest:(NSURLRequest *)request; - (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL; - (void)loadData:(NSData *)data MI…

css使按钮固定在界面上面

css使按钮固定在界面上面<div><div style"border-bottom: 1px solid #e7e7e7"><a class"" onclick"saveTable()" style"margin-left: 2%"><i class""></i>保存</a><a class"&q…

Spring MVC:Trgger手动验证表单对象

有时可能需要在Spring MVC Controller中使用手动验证。 使用Spring的org.springframework.validation.ValidationUtils类非常简单。 了解如何在两种不同的情况下调用验证器。 方案1 –调用验证 在这种情况下&#xff0c;我有一个带有用户名字段的用户表单。 用户名字段使用自定…

tez什么意思_传统数仓和大数据数仓的区别是什么?

概念与容器为什么先说这个&#xff0c;其实很简单&#xff1a;因为绝大多数人都把这两个概念混为一谈。然后就会出现各种各样的问题&#xff1a;oracle不是数据库么&#xff0c;怎么又是数据仓库&#xff1f;Hive不是数据仓库么&#xff1f;怎么又是数据库&#xff1f;数据仓库…

Ajax4Jsf 简单介绍

Ajax4jsf 允许开发人员将 Ajax 功能添加到 JSF 应用程序中&#xff0c;而不需要 JavaScript 或用 Ajax 图形部件替换现有的组件。这个包还允许在使用 Java 2D 库时动态地生成图像。Ajax 是一种编程技术&#xff0c;它处理只有页面的一部分需要处理而不需要重新装载整个页面的情…