JS限制上传图片大小不使用控件在本地实现


Posted in Javascript onDecember 19, 2012

文件上传之前的检测,通常是通过文件名来判断文件类型是否合法,但是要想检测文件的大小很难办到,除非在本地或者使用控件。使用JS可以轻松解决词问题,js在上传图片前判断大小 这个可以用javascript实现,效果...//允许上传图片文件的大小
具体代码如下
JS限制上传图片大小不使用控件在本地实现 

<script language=javascript> 
var ImgObj=new Image(); //建立一个图像对象 
var AllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型 
var FileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,HasCheked,IsImg//全局变量 图片相关属性 
//以下为限制变量 
var AllowExt=".jpg|.gif|.doc|.txt|" //允许上传的文件类型 ?为无限制 每个扩展名后边要加一个"|" 小写字母表示 
//var AllowExt=0 
var AllowImgFileSize=70; //允许上传图片文件的大小 0为无限制 单位:KB 
var AllowImgWidth=500; //允许上传的图片的宽度 ?为无限制 单位:px(像素) 
var AllowImgHeight=500; //允许上传的图片的高度 ?为无限制 单位:px(像素) 
HasChecked=false; 
function CheckProperty(obj) //检测图像属性 
{ 
FileObj=obj; 
if(ErrMsg!="") //检测是否为正确的图像文件 返回出错信息并重置 
{ 
ShowMsg(ErrMsg,false); 
return false; //返回 
} 
if(ImgObj.readyState!="complete") //如果图像是未加载完成进行循环检测 
{ 
setTimeout("CheckProperty(FileObj)",500); 
return false; 
} 
ImgFileSize=Math.round(ImgObj.fileSize/1024*100)/100;//取得图片文件的大小 
ImgWidth=ImgObj.width //取得图片的宽度 
ImgHeight=ImgObj.height; //取得图片的高度 
FileMsg="\n图片大小:"+ImgWidth+"*"+ImgHeight+"px"; 
FileMsg=FileMsg+"\n图片文件大小:"+ImgFileSize+"Kb"; 
FileMsg=FileMsg+"\n图片文件扩展名:"+FileExt; 
if(AllowImgWidth!=0&&AllowImgWidth<ImgWidth) 
ErrMsg=ErrMsg+"\n图片宽度超过限制。请上传宽度小于"+AllowImgWidth+"px的文件,当前图片宽度为"+ImgWidth+"px"; 
if(AllowImgHeight!=0&&AllowImgHeight<ImgHeight) 
ErrMsg=ErrMsg+"\n图片高度超过限制。请上传高度小于"+AllowImgHeight+"px的文件,当前图片高度为"+ImgHeight+"px"; 
if(AllowImgFileSize!=0&&AllowImgFileSize<ImgFileSize) 
ErrMsg=ErrMsg+"\n图片文件大小超过限制。请上传小于"+AllowImgFileSize+"KB的文件,当前文件大小为"+ImgFileSize+"KB"; 
if(ErrMsg!="") 
ShowMsg(ErrMsg,false); 
else 
ShowMsg(FileMsg,true); 
} 
ImgObj.onerror=function(){ErrMsg='\n图片格式不正确或者图片已损坏!'} 
function ShowMsg(msg,tf) //显示提示信息 tf=true 显示文件信息 tf=false 显示错误信息 msg-信息内容 
{ 
msg=msg.replace("\n","<li>"); 
msg=msg.replace(/\n/gi,"<li>"); 
if(!tf) 
{ 
document.all.UploadButton.disabled=true; 
FileObj.outerHTML=FileObj.outerHTML; 
MsgList.innerHTML=msg; 
HasChecked=false; 
} 
else 
{ 
document.all.UploadButton.disabled=false; 
if(IsImg) 
PreviewImg.innerHTML="<img src='"+ImgObj.src+"' width='60' height='60'>" 
else 
PreviewImg.innerHTML="非图片文件"; 
MsgList.innerHTML=msg; 
HasChecked=true; 
} 
} 
function CheckExt(obj) 
{ 
ErrMsg=""; 
FileMsg=""; 
FileObj=obj; 
IsImg=false; 
HasChecked=false; 
PreviewImg.innerHTML="预览区"; 
if(obj.value=="")return false; 
MsgList.innerHTML="文件信息处理中..."; 
document.all.UploadButton.disabled=true; 
FileExt=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase(); 
if(AllowExt!=0&&AllowExt.indexOf(FileExt+"|")==-1) //判断文件类型是否允许上传 
{ 
ErrMsg="\n该文件类型不允许上传。请上传 "+AllowExt+" 类型的文件,当前文件类型为"+FileExt; 
ShowMsg(ErrMsg,false); 
return false; 
} 
if(AllImgExt.indexOf(FileExt+"|")!=-1) //如果图片文件,则进行图片信息处理 
{ 
IsImg=true; 
ImgObj.src=obj.value; 
CheckProperty(obj); 
return false; 
} 
else 
{ 
FileMsg="\n文件扩展名:"+FileExt; 
ShowMsg(FileMsg,true); 
} 
} 
function SwitchUpType(tf) 
{ 
if(tf) 
str='<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;">' 
else 
str='<input type="text" name="file1" onblur="CheckExt(this)" style="width:180px;">' 
document.all.file1.outerHTML=str; 
document.all.UploadButton.disabled=true; 
MsgList.innerHTML=""; 
} 
</script> 
<form enctype="multipart/form-data" method="POST" onsubmit="return HasChecked;"> 
<fieldset style="width: 372; height: 60;padding:2px;"> 
<legend><font color="#FF0000">图片来源</font></legend> 
<input type="radio" name="radio1" checked onclick="SwitchUpType(true);">本地<input type="radio" name="radio1" onclick="SwitchUpType(false);">远程:<input type="file" name="file1" onchange="CheckExt(this)" style="width:180px;"> <input type="submit" id="UploadButton" value="开始上传" disabled> 
<div style="border:1 solid #808080;background:#E0E0E0;width100%;height:20px;color:#606060;padding:5px;"> 
<table border="0"><tr><td width="60" id="PreviewImg">预览区</td><td id="MsgList" valign="top"></td></tr></table> 
</div> 
</fieldset> 
</form>

<完>
注意读者可以直接复制以上代码,另存为HTML文件里,预览JS限制上传图片大小效果
Javascript 相关文章推荐
How to Auto Include a Javascript File
Feb 02 Javascript
关于javascript 回调函数中变量作用域的讨论
Sep 11 Javascript
轻轻松松学JS调试(不下载任何工具)
Apr 14 Javascript
Javascript中this的用法详解
Sep 22 Javascript
js+css绘制颜色动态变化的圈中圈效果
Jan 27 Javascript
javascript之Array 数组对象详解
Jun 07 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
JS实现的RC4加密算法示例
Aug 16 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
Node.js assert断言原理与用法分析
Jan 04 Javascript
微信小程序用canvas画图并分享
Mar 09 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
Dec 19 #Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
Dec 19 #Javascript
ajax java 实现自动完成功能
Dec 19 #Javascript
JavaScript字符串String和Array操作的有趣方法
Dec 18 #Javascript
学习js在线html(富文本,所见即所得)编辑器
Dec 18 #Javascript
javascript jscroll模拟html元素滚动条
Dec 18 #Javascript
Android中资源文件(非代码部分)的使用概览
Dec 18 #Javascript
You might like
PHP分页函数代码(简单实用型)
2010/12/02 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
extjs grid设置某列背景颜色和字体颜色的方法
2010/09/03 Javascript
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
2016/01/29 Javascript
JavaScript弹出对话框的三种方式
2016/03/23 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
微信小程序实现注册登录功能(表单校验、错误提示)
2019/12/10 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
python 查找文件名包含指定字符串的方法
2018/06/05 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
见习期自我鉴定
2013/11/07 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
毕业自我评价
2014/02/05 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
投标文件签署授权委托书范本
2014/10/12 职场文书
淘宝客服专员岗位职责
2015/04/07 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
军训决心书范文
2015/09/22 职场文书
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
Python音乐爬虫完美绕过反爬
2021/08/30 Python