Javascript 如何在将图像保存到数据库之前验证图像大小和尺寸
我正在使用ASP.NET C#4.0,我的web表单由输入类型文件组成,用于上载图像 在保存到SQL数据库之前,我需要在客户端验证映像 因为我使用input type=file上传图像,所以我不想发回用于验证图像大小、尺寸的页面 需要你的帮助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已经或即将支持
谢谢你可以这样做 您可以在支持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