职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 578|回复: 8

javascript判断上传图片文件类型(后缀名)

[复制链接]
fossil 发表于 2011-8-30 09:53 | 显示全部楼层 |阅读模式
  
1、根本是正则表达式,不存在浏览器问题

Js代码  
/*  
* 判断图片类型  
*   
* @param ths   
*          type="file"的javascript对象  
* @return true-符合要求,false-不符合  
*/  
function checkImgType(ths){   
    if (ths.value == "") {   
        alert("请上传图片");   
        return false;   
    } else {   
        if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(ths.value)) {   
            alert("图片类型必须是.gif,jpeg,jpg,png中的一种");   
            ths.value = "";   
            return false;   
        }   
    }   
    return true;   
}  

/*
* 判断图片类型
*
* @param ths
*                         type="file"的javascript对象
* @return true-符合要求,false-不符合
*/
function checkImgType(ths){
        if (ths.value == "") {
                alert("请上传图片");
                return false;
        } else {
                if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(ths.value)) {
                        alert("图片类型必须是.gif,jpeg,jpg,png中的一种");
                        ths.value = "";
                        return false;
                }
        }
        return true;
}

2、以下判断像素的在firefox下不行,主要是这句代码document.body.insertAdjacentElement("beforeEnd", img);

暂时未找到解决办法....

Js代码  
/*  
* 判断图片大小  
*   
* @param ths   
*          type="file"的javascript对象  
* @param width  
*          需要符合的宽   
* @param height  
*          需要符合的高  
* @return true-符合要求,false-不符合  
*/  
function checkImgPX(ths, width, height) {   
    var img = null;   
    img = document.createElement("img");   
    document.body.insertAdjacentElement("beforeEnd", img); // firefox不行   
    img.style.visibility = "hidden";   
    img.src = ths.value;   
    var imgwidth = img.offsetWidth;   
    var imgheight = img.offsetHeight;   
      
    alert(imgwidth + "," + imgheight);   
      
    if(imgwidth != width || imgheight != height) {   
        alert("图的尺寸应该是" + width + "x"+ height);   
        ths.value = "";   
        return false;   
    }   
    return true;   
}  

/*
* 判断图片大小
*
* @param ths
*                         type="file"的javascript对象
* @param width
*                         需要符合的宽
* @param height
*                         需要符合的高
* @return true-符合要求,false-不符合
*/
function checkImgPX(ths, width, height) {
        var img = null;
        img = document.createElement("img");
        document.body.insertAdjacentElement("beforeEnd", img); // firefox不行
        img.style.visibility = "hidden";
        img.src = ths.value;
        var imgwidth = img.offsetWidth;
        var imgheight = img.offsetHeight;
       
        alert(imgwidth + "," + imgheight);
       
        if(imgwidth != width || imgheight != height) {
                alert("图的尺寸应该是" + width + "x"+ height);
                ths.value = "";
                return false;
        }
        return true;
}
求解....
求解....


Js代码  
ths.value = "";  // IE无效  

ths.value = "";  // IE无效..讨厌的浏览器兼容问题!

.

 楼主| fossil 发表于 2011-8-30 09:53 | 显示全部楼层
汗,要百度干嘛——

input.fileName
input.fileSize

芷馨 发表于 2011-8-30 09:53 | 显示全部楼层
key232323 写道
汗,要百度干嘛——

input.fileName
input.fileSize



.....主要是判断图片像素大小那有问题

走失的猫咪 发表于 2011-8-30 09:53 | 显示全部楼层
java110eye 写道
key232323 写道
汗,要百度干嘛——

input.fileName
input.fileSize



.....主要是判断图片像素大小那有问题


哦,我没仔细看——原来客户端js也可以获取上传图片长宽?

shmilyyu 发表于 2011-8-30 09:53 | 显示全部楼层
IE 可以用下面的方法。
  
function getfile(obj){   
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {   
                        // ie   
                        obj.select();   
                        o.filename = document.selection.createRange().text;   
                        var image = new Image();   
                        image.dynsrc = o.filename;   
                        o.filesize = image.fileSize;   
...宽高就用你的方法去获取。   
                    }   
....   
}   
  
<input type="file" onchange='getfile(this)'>file</input>  

function getfile(obj){
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
                        // ie
                        obj.select();
                        o.filename = document.selection.createRange().text;
                        var image = new Image();
                        image.dynsrc = o.filename;
                        o.filesize = image.fileSize;
...宽高就用你的方法去获取。
                    }
....
}

<input type="file" onchange='getfile(this)'>file</input>


还可以用
  
if (isIE && !obj.files) {      
      var filePath = obj.value;   
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");         
      var file = fileSystem.GetFile (filePath);   
      fileSize = file.Size;   
宽高就用你的方法去获取。   
    }  

if (isIE && !obj.files) {   
      var filePath = obj.value;
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");      
      var file = fileSystem.GetFile (filePath);
      fileSize = file.Size;
宽高就用你的方法去获取。
    }


fl 发表于 2011-8-30 09:54 | 显示全部楼层
img.src = ths.value;  这样的写法在IE7之后就行不通了吧

fl 发表于 2011-8-30 09:54 | 显示全部楼层
嗯,挺好的
我提个相关的问题吧 判断文件类型不能只通过文件的后缀名的...当然这些要到后台才可以判断 恶意用户可以将一个病毒文件修改进行上传

曾经的小孩 发表于 2011-8-30 09:54 | 显示全部楼层
上传文件前端稍微控制一下但是,主要的判断最好还是通过后台程序通过读取文件头信息的方式来判断

无处不在 发表于 2011-8-30 09:54 | 显示全部楼层
feige05 写道
IE 可以用下面的方法。
  
function getfile(obj){   
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {   
                        // ie   
                        obj.select();   
                        o.filename = document.selection.createRange().text;   
                        var image = new Image();   
                        image.dynsrc = o.filename;   
                        o.filesize = image.fileSize;   
...宽高就用你的方法去获取。   
                    }   
....   
}   
  
<input type="file" onchange='getfile(this)'>file</input>  

function getfile(obj){
if (window.navigator.userAgent.indexOf("MSIE") >= 1) {
                        // ie
                        obj.select();
                        o.filename = document.selection.createRange().text;
                        var image = new Image();
                        image.dynsrc = o.filename;
                        o.filesize = image.fileSize;
...宽高就用你的方法去获取。
                    }
....
}

<input type="file" onchange='getfile(this)'>file</input>


还可以用
  
if (isIE && !obj.files) {      
      var filePath = obj.value;   
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");         
      var file = fileSystem.GetFile (filePath);   
      fileSize = file.Size;   
宽高就用你的方法去获取。   
    }  

if (isIE && !obj.files) {   
      var filePath = obj.value;
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");      
      var file = fileSystem.GetFile (filePath);
      fileSize = file.Size;
宽高就用你的方法去获取。
    }



firefox下呢?
晕,....chrome还忘了测试...
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-27 13:12 , Processed in 0.116670 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表