Javascript 如何在将图像保存到数据库之前验证图像大小和尺寸

Javascript 如何在将图像保存到数据库之前验证图像大小和尺寸,javascript,jquery,validation,image-upload,Javascript,Jquery,Validation,Image Upload,我正在使用ASP.NET C#4.0,我的web表单由输入类型文件组成,用于上载图像 在保存到SQL数据库之前,我需要在客户端验证映像 因为我使用input type=file上传图像,所以我不想发回用于验证图像大小、尺寸的页面 需要你的帮助 谢谢你可以这样做 您可以在支持W3C新版本的浏览器上执行此操作,使用FileReader界面上的函数,并将数据URL分配给img的src(之后可以读取图像的高度和宽度)。目前Firefox3.6支持文件API,我认为Chrome和Safari已经或即将支持

我正在使用ASP.NET C#4.0,我的web表单由输入类型文件组成,用于上载图像

在保存到SQL数据库之前,我需要在客户端验证映像

因为我使用input type=file上传图像,所以我不想发回用于验证图像大小、尺寸的页面

需要你的帮助
谢谢

你可以这样做

您可以在支持W3C新版本的浏览器上执行此操作,使用
FileReader
界面上的函数,并将数据URL分配给
img
src
(之后可以读取图像的
高度和
宽度)。目前Firefox3.6支持文件API,我认为Chrome和Safari已经或即将支持

所以你在过渡阶段的逻辑是这样的:

  • 检测浏览器是否支持文件API(这很简单:
    if(typeof window.FileReader=='function')

  • 如果有,很好,在本地读取数据并将其插入图像中以查找尺寸

  • 如果没有,则将文件上载到服务器(可能从iframe提交表单以避免离开页面),然后轮询服务器,询问图像有多大(或者如果愿意,只询问上载的图像)

  • 编辑一段时间以来,我一直想制作一个文件API示例;这里有一个:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <title>Show Image Dimensions Locally</title>
    <style type='text/css'>
    body {
        font-family: sans-serif;
    }
    </style>
    <script type='text/javascript'>
    
        function loadImage() {
            var input, file, fr, img;
    
            if (typeof window.FileReader !== 'function') {
                write("The file API isn't supported on this browser yet.");
                return;
            }
    
            input = document.getElementById('imgfile');
            if (!input) {
                write("Um, couldn't find the imgfile element.");
            }
            else if (!input.files) {
                write("This browser doesn't seem to support the `files` property of file inputs.");
            }
            else if (!input.files[0]) {
                write("Please select a file before clicking 'Load'");
            }
            else {
                file = input.files[0];
                fr = new FileReader();
                fr.onload = createImage;
                fr.readAsDataURL(file);
            }
    
            function createImage() {
                img = document.createElement('img');
                img.onload = imageLoaded;
                img.style.display = 'none'; // If you don't want it showing
                img.src = fr.result;
                document.body.appendChild(img);
            }
    
            function imageLoaded() {
                write(img.width + "x" + img.height);
                // This next bit removes the image, which is obviously optional -- perhaps you want
                // to do something with it!
                img.parentNode.removeChild(img);
                img = undefined;
            }
    
            function write(msg) {
                var p = document.createElement('p');
                p.innerHTML = msg;
                document.body.appendChild(p);
            }
        }
    
    </script>
    </head>
    <body>
    <form action='#' onsubmit="return false;">
    <input type='file' id='imgfile'>
    <input type='button' id='btnLoad' value='Load' onclick='loadImage();'>
    </form>
    </body>
    </html>
    
    
    局部显示图像尺寸
    身体{
    字体系列:无衬线;
    }
    函数loadImage(){
    var输入、文件、fr、img;
    if(typeof window.FileReader!=“函数”){
    写入(“此浏览器尚不支持文件API。”);
    返回;
    }
    输入=document.getElementById('imgfile');
    如果(!输入){
    写(“嗯,找不到imgfile元素。”);
    }
    如果(!input.files){
    写入(“此浏览器似乎不支持文件输入的`files`属性。”);
    }
    如果(!input.files[0]),则为else{
    写入(“请在单击“加载”之前选择一个文件”);
    }
    否则{
    file=input.files[0];
    fr=新文件读取器();
    fr.onload=createImage;
    fr.readAsDataURL(文件);
    }
    函数createImage(){
    img=document.createElement('img');
    img.onload=图像加载;
    img.style.display='none';//如果不想显示它
    img.src=fr.result;
    文件.正文.附件(img);
    }
    函数imageLoaded(){
    写入(img.宽度+“x”+img.高度);
    //下一位删除图像,这显然是可选的——可能是您想要的
    //用它做点什么!
    img.parentNode.removeChild(img);
    img=未定义;
    }
    函数写入(msg){
    var p=document.createElement('p');
    p、 innerHTML=msg;
    文件.正文.附件(p);
    }
    }
    

    在Firefox 3.6上非常有效。我避免使用那里的任何库,因此对于属性(DOM0)样式的事件处理程序等,我深表歉意。

    您可以这样做

    您可以在支持W3C新版本的浏览器上执行此操作,使用
    FileReader
    界面上的函数,并将数据URL分配给
    img
    src
    (之后可以读取图像的
    高度和
    宽度)。目前Firefox3.6支持文件API,我认为Chrome和Safari已经或即将支持

    所以你在过渡阶段的逻辑是这样的:

  • 检测浏览器是否支持文件API(这很简单:
    if(typeof window.FileReader=='function')

  • 如果有,很好,在本地读取数据并将其插入图像中以查找尺寸

  • 如果没有,则将文件上载到服务器(可能从iframe提交表单以避免离开页面),然后轮询服务器,询问图像有多大(或者如果愿意,只询问上载的图像)

  • 编辑一段时间以来,我一直想制作一个文件API示例;这里有一个:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    <title>Show Image Dimensions Locally</title>
    <style type='text/css'>
    body {
        font-family: sans-serif;
    }
    </style>
    <script type='text/javascript'>
    
        function loadImage() {
            var input, file, fr, img;
    
            if (typeof window.FileReader !== 'function') {
                write("The file API isn't supported on this browser yet.");
                return;
            }
    
            input = document.getElementById('imgfile');
            if (!input) {
                write("Um, couldn't find the imgfile element.");
            }
            else if (!input.files) {
                write("This browser doesn't seem to support the `files` property of file inputs.");
            }
            else if (!input.files[0]) {
                write("Please select a file before clicking 'Load'");
            }
            else {
                file = input.files[0];
                fr = new FileReader();
                fr.onload = createImage;
                fr.readAsDataURL(file);
            }
    
            function createImage() {
                img = document.createElement('img');
                img.onload = imageLoaded;
                img.style.display = 'none'; // If you don't want it showing
                img.src = fr.result;
                document.body.appendChild(img);
            }
    
            function imageLoaded() {
                write(img.width + "x" + img.height);
                // This next bit removes the image, which is obviously optional -- perhaps you want
                // to do something with it!
                img.parentNode.removeChild(img);
                img = undefined;
            }
    
            function write(msg) {
                var p = document.createElement('p');
                p.innerHTML = msg;
                document.body.appendChild(p);
            }
        }
    
    </script>
    </head>
    <body>
    <form action='#' onsubmit="return false;">
    <input type='file' id='imgfile'>
    <input type='button' id='btnLoad' value='Load' onclick='loadImage();'>
    </form>
    </body>
    </html>
    
    
    局部显示图像尺寸
    身体{
    字体系列:无衬线;
    }
    函数loadImage(){
    var输入、文件、fr、img;
    if(typeof window.FileReader!=“函数”){
    写入(“此浏览器尚不支持文件API。”);
    返回;
    }
    输入=document.getElementById('imgfile');
    如果(!输入){
    写(“嗯,找不到imgfile元素。”);
    }
    如果(!input.files){
    写入(“此浏览器似乎不支持文件输入的`files`属性。”);
    }
    如果(!input.files[0]),则为else{
    写入(“请在单击“加载”之前选择一个文件”);
    }
    否则{
    file=input.files[0];
    fr=新文件读取器();
    fr.onload=createImage;
    fr.readAsDataURL(文件);
    }
    函数createImage(){
    img=document.createElement('img');
    img.onload=图像加载;
    img.style.display='none';//如果不想显示它
    img.src=fr.result;
    文件.正文.附件(img);
    }
    函数imageLoaded(){
    写入(img.宽度+“x”+img.高度);
    //下一位删除图像,这显然是可选的——可能是您想要的
    //用它做点什么!
    img.parentNode.removeChild(img);
    img=未定义;
    }
    函数写入(msg){
    var p=document.createElement('p');
    p、 innerHTML=msg;
    文件.正文.a