`

Javascript 验证上传图片大小[客户端]

阅读更多
需求分析:
在做上传图片的时候,如果不限制上传图片大小,后果非常的严重。那么我们怎样才可以解决一个棘手的问题呢?有两种方式:
1)后台处理: 也就是AJAX POST提交到后台,把图片上传到服务器上,然后获得该图片大小做处理。
2)前台处理: 也就是利用Javascript获取该图片大小。
显然第一种方式,很不好。因为需要把文件先上传到服务器上,如果文件很大的话,在加上网不是很快,需要等待好长时间,治标不治本。
功能解析:
在这里我只介绍IE与FireFox两个浏览器的不同做法。
IE6:
关键字: fileSize onreadystatechange complete
在IE6中可以通过Img对象的fileSize 属性获得文件大小,但这个fileSize属性的正确值是建立在onreadystatechange 事件的complete 中,也就是

<img src="" class="img" 
onreadystatechange="Javascript:sizeCheck(this);"> 
function sizeCheck(img) { 

if(img.readyState == "complete") { 
alert(img.fileSize); 
} 
} 


FireFox3.0:
关键字: getAsDataURL() fileSize
在FireFox中处于安全的考虑,无法获得上传图片的完整路径,只能获得图片名称。但浏览器提供nsIDOMFile這樣一個接口,所以需要通过getAsDataURL()获得处理过后的路径,但该路径不影响图片src显示。
nsIDOMFile接口:
DOMString getAsBinary();
DOMString getAsDataURL();
DOMString getAsText(in DOMString encoding);

<input type="file" name="uploadImg" 
onchange="Javascript:checkFileChange(this);" 
size="12"/> 
function checkFileChange(obj) { 
var img = document.getElementById("img"); 
img.src = obj.files[0].getAsDataUrl(); 
alert(obj.files[0].fileSize); 
}


以上是两个不同浏览器的处理方式,那么怎么把他们融和到一起呢?我在下面会将我做的小例子贴出来,其中里面我使用JQuery,方便与获取对象
<!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" xml:lang="zh" lang="zh" dir="ltr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script type="text/javascript" src="lib/jquery-1.3.2.min.js" ></script> 
<title>检查上传图片大小</title> 
<style type="text/css"> 
.img {width:136px;height:102px;} 
.imgError{border:3px solid red;} 
</style> 
<script type="text/javascript"> 
//限制上传图片大小100K 
var MAXSIZE = 100 * 1024; 

//图片大小限制信息 
var ERROR_IMGSIZE = "图片大小不能超过100K"; 
//默认图片 
var NOPHOTO = "imgs/nophoto.gif"; 

//图片是否合格 
var isImg = true; 
/** 
* Input file onchange事件 
* @params obj file对象 
* @return void 
**/ 
function checkFileChange(obj) { 

//初始化设置 
$(".imgTable").removeClass("imgError"); 
updateTips(""); 
var img = $(".img").get(0); 
var file = obj.value; 
var exp = /.\.jpg|.\.gif|.\.png|.\.bmp/i; 
if (exp.test(file)) {//验证格式 
if($.browser.msie) {//判断是否是IE 
img.src = file; 
} else { 
img.src = obj.files[0].getAsDataURL(); 
sizeCheck(img); 
} 

} else { 
img.src = NOPHOTO; 
$(".imgTable").addClass("imgError"); 
updateTips("图片格式不正确"); 
isImg = false; 
} 

} 
/** 
* sizeCheck 检查图片大小 
* @params img 图片对象 
* @return void 
**/ 
function sizeCheck(img) { 
//初始化设置 
$(".imgTable").removeClass("imgError"); 
updateTips(""); 
if ($.browser.msie) {//查看是否是IE 
if(img.readyState == "complete") { 
if (img.fileSize > MAXSIZE) { 
$(".imgTable").addClass("imgError"); 
updateTips(ERROR_IMGSIZE); 
isImg = false; 
}else { 
isImg = true; 
} 

}else { 
$(".imgTable").addClass("imgError"); 
updateTips(ERROR_IMGSIZE); 
isImg = false; 
} 

} else { 
var file = $("input:file[name='uploadImg']")[0]; 

if (file.files[0].fileSize > MAXSIZE) { 
$(".imgTable").addClass("imgError"); 
updateTips(ERROR_IMGSIZE); 
isImg = false; 
}else { 
isImg = true; 
} 

} 
} 

/** 
* updateTips 注册错误信息显示 
* @params str 显示内容 
* @return void 
**/ 
function updateTips(str) { 
$("p#errorTips").text(str); 
} 
/** 
* commit 注册提交 
* @return void 
**/ 
function commit() { 

var isCommit = true; 
var usrname = $("input:text[name='usrname']"), 
email = $("input:text[name='email']"), 
img = $(".img"), 
file = $("input:file[name='uploadImg']"), 
frm = document.frm; 

isCommit = isCommit && isImg; 

if(isCommit) { 
frm.action = "about:blank"; 
frm.submit(); 
} 
} 
/** 
* errorImg 图片错误显示 
* @params img 图片对象 
* @return void 
**/ 
function errorImg(img) { 
img.src = NOPHOTO; 
} 

</script> 
</head> 
<body> 
<form name="frm" method="post"> 
<p id="errorTips"> </p> 
<table cellpadding="1" cellspacing="0" width="350px" border="1"> 
<tr> 
<td><label>姓名:</label></td> 
<td><input type="text" name="usrname" maxlength="50"/></td> 
</tr> 
<tr> 
<td><label>性别:</label></td> 
<td><input type="radio" name="sex" value="0"/>男<input type="radio" name="sex" value="0"/>女</td> 
</tr> 
<tr> 
<td><label>邮件:</label></td> 
<td><input type="text" name="email" maxlength="100"/></td> 
</tr> 
<tr> 
<td><lable>图像</label></td> 
<td> 
<table cellpadding="0" cellspacing="0" class="imgTable"> 
<tr> 
<td><img src="imgs/nophoto.gif" src="imgs/nophoto.gif" class="img" alt="头像" onerror="Javascript:errorImg(this);" 
onreadystatechange="Javascript:sizeCheck(this);"/> 
</td> 
</tr> 
<tr> 
<td><input type="file" name="uploadImg" onchange="Javascript:checkFileChange(this);" 
size="12"/></td> 
</tr> 
</table> 
</td> 
</tr> 
<tr> 
<td colspan="2"><a href="Javascript:commit();" href="Javascript:commit();">注册</a></td> 
</tr> 
</table> 
</form> 
</body> 
</html>

分享到:
评论

相关推荐

    Javascript验证上传图片大小[前台处理]_.docx

    在进行图片上传功能时,确保图片大小的验证是非常重要的安全措施。这有助于防止用户上传过大的文件,从而避免服务器资源的过度消耗,提高网站性能,以及优化用户体验。本文主要讨论了两种图片大小验证方法:后台处理...

    php文件上传大小客户端判断

    标题"php文件上传大小客户端判断"指的是在客户端(通常是用户浏览器)对文件上传大小进行预判,而不是依赖服务器端的PHP配置。这样可以提前过滤掉超出限制的文件,减轻服务器的负担。 描述中提到的方法,是通过...

    支持图片上传及实时显示,可设置显示图片的大小。由php、Ajax、javascript开发

    这个项目是用PHP、Ajax和JavaScript这三种技术实现的,允许用户上传图片并即时预览,同时还可以调整显示的图片大小。接下来,我们将深入探讨这些技术以及它们在实现此功能中的角色。 **PHP** 是一种广泛使用的...

    FileUpload控件上传文件客户端验证格式

    1. **JavaScript验证**:通过编写JavaScript函数,可以在用户选择文件后立即检查文件的大小和扩展名。例如,可以使用`&lt;asp:RegularExpressionValidator&gt;`控件配合正则表达式限制上传的文件类型,或者使用JavaScript...

    php+javascript批量上传图片

    使用 JavaScript,可以实现在客户端验证图片的上传格式、大小等信息,从而减少服务器的负载。此外,JavaScript 也可以用于实现上传图片的进度条、上传按钮等交互式功能。 HTML、CSS 和 JavaScript 的结合使用是实现...

    Javascript验证上传图片大小[前台处理]

    后台处理指的是服务器端在图片上传后进行大小的检查,而前台处理则是在图片上传到服务器之前,通过客户端的JavaScript代码对图片大小进行验证。 首先,前台处理有其显著的优势,主要表现在用户体验上。如果上传的...

    javascript 客户端验证上传图片的大小(兼容IE和火狐)

    标题中的“javascript 客户端验证上传图片的大小(兼容IE和火狐)”涉及到的知识点是使用JavaScript在用户端(客户端)进行图片文件的上传前验证,主要目的是确保图片大小符合服务器接受的限制,同时该方法需要兼容...

    JavaScript判断上传文件大小的限制脚本

    本文将深入探讨如何使用JavaScript来实现这一功能,通过前端验证,防止大文件上传导致的网络延迟或者服务器压力。 一、JavaScript简介 JavaScript是一种广泛使用的轻量级编程语言,主要应用于Web浏览器,用于实现...

    js验证上传文件大小

    总结来说,JavaScript验证上传文件大小主要通过监听文件输入字段的`change`事件,获取文件对象,然后检查`size`属性。结合HTML和CSS,我们可以创建一个交互式的文件上传界面,提供友好的用户反馈。这个功能对于任何...

    客户端统一验证JavaScript函数库及示例源码

    FileSystemObject对象,GetFileSize(…)可直接取得待上传文件的字节大小,但也有限制就是客户端浏览须启用ActiveX插件,若没有启用时,会提示用户按步骤设置。CancelClientEvent()是使用事件冒泡阻止了事件的继续...

    文件上传 (服务端+客户端)

    为防止恶意文件上传,服务器需要验证文件类型、大小,甚至进行病毒扫描。此外,考虑到服务器的存储资源,可以设置合理的文件大小限制,并且及时清理未使用的临时文件。为了提高性能,可以采用多线程处理文件,或者...

    通过客户端验证上传图片文件大小的ASP

    ### 通过客户端验证上传图片文件大小的ASP:知识点解析 #### 一、ASP与客户端验证的概念 1. **ASP(Active Server Pages)**:是一种服务器端脚本环境,用于创建和运行动态、交互式 Web 应用程序。在 ASP 中,可以...

    无刷新上传图片 JavaScript

    无刷新上传图片是一种提高用户体验的技术,它通过JavaScript和Ajax实现,让用户在不离开当前页面的情况下完成文件上传。这种技术在现代网页应用中广泛使用,因为它能够保持页面的流畅性,减少用户等待时间,并且使...

    eWebEditor,dwr框架进行验证和javascript验证

    在这个主题中,我们将深入探讨这两个工具以及它们如何配合进行验证和JavaScript验证。 **eWebEditor** 是一款基于JavaScript的在线HTML编辑器,它允许用户在Web页面上实现类似Word的编辑体验。通过提供一系列富文本...

    如何使用javascript限制文件上传大小

    在网页开发中,用户可能需要上传各种文件,如图片、文档等。为了提供良好的用户体验并保护服务器资源,通常需要对可上传的文件大小进行限制。本文将深入探讨如何使用JavaScript来实现这一功能,同时也会涉及一些相关...

    JS判断并预览客户端上传图片

    综上所述,"JS判断并预览客户端上传图片"这一技术涉及到对用户上传图片的格式、大小进行验证,并提供实时预览的功能,以确保上传的图片符合规定,提高用户体验。在实际应用中,还可能需要考虑错误提示、多图上传、...

Global site tag (gtag.js) - Google Analytics