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 相关文章推荐
jQuery学习5 jQuery事件模型
Feb 07 Javascript
jQuery中(function($){})(jQuery)详解
Jul 15 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
javascript每日必学之继承
Feb 23 Javascript
详细探究ES6之Proxy代理
Jul 22 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 Javascript
浅谈KOA2 Restful方式路由初探
Mar 14 Javascript
浅析Vue下的components模板使用及应用
Nov 27 Javascript
Node.js API详解之 module模块用法实例分析
May 13 Javascript
ES6 Symbol在对象中的作用实例分析
Jun 06 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 判断变量类型实现代码
2009/10/23 PHP
PHP执行zip与rar解压缩方法实现代码
2010/12/05 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP微信支付开发实例
2016/06/22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
基于jquery的高性能td和input切换并可修改内容实现代码
2011/01/09 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
JQuery性能优化的几点建议
2014/05/14 Javascript
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
用简洁的jQuery方法toggleClass实现隔行换色
2014/10/22 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
Javascript中的高阶函数介绍
2015/03/15 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
深入理解js中this的用法
2016/05/28 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
财政局长自荐信范文
2013/12/22 职场文书
市级文明单位申报材料
2014/05/07 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
社区灵活就业证明
2014/11/03 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
2015选调生工作总结
2015/07/24 职场文书
毕业酒会致辞
2015/07/29 职场文书
公司晚会主持词
2019/04/17 职场文书
JS代码编译器Monaco使用方法
2021/06/11 Javascript
浅谈redis整数集为什么不能降级
2021/07/25 Redis