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 相关文章推荐
JS是否可以跨文件同时控制多个iframe页面的应用技巧
Dec 16 Javascript
js实现浏览本地文件并显示扩展名的方法
Aug 17 Javascript
AngularJS入门教程之控制器详解
Jul 27 Javascript
setTimeout学习小结
Feb 08 Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
JavaScript解析任意形式的json树型结构展示
Jul 23 Javascript
vue的diff算法知识点总结
Mar 29 Javascript
JS如何获取地址栏的参数实例讲解
Oct 06 Javascript
通过循环优化 JavaScript 程序
Jun 24 Javascript
vue语法自动转typescript(解放双手)
Sep 18 Javascript
微信小程序实现登录注册功能
Dec 29 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中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
PHP实现APP微信支付的实例讲解
2018/02/10 PHP
PHP微信发送推送消息乱码的解决方法
2019/02/28 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
AngularJS模板加载用法详解
2016/11/04 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
react 兄弟组件如何调用对方的方法示例
2018/10/23 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
python3.x上post发送json数据
2018/03/04 Python
Python3 replace()函数使用方法
2018/03/19 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
python Matplotlib基础--如何添加文本和标注
2021/01/26 Python
CSS3解决移动页面上点击链接触发色块的问题
2016/06/03 HTML / CSS
GUESS盖尔斯法国官网:美国时尚品牌
2016/09/23 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
数据库方面面试题
2012/04/22 面试题
生日邀请函范文
2014/01/13 职场文书
创业计划书撰写原则
2014/01/25 职场文书
先进典型发言材料
2014/12/30 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
思品教学工作总结
2015/08/10 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
yyds什么意思?90后已经听不懂00后讲话了……
2022/02/03 杂记