Javascript 인증 업로드 그림 크기 [프론트 데스크 톱 처리]
사진 을 올 릴 때 사진 의 크기 를 제한 하지 않 으 면 결과 가 심각 하 다.그렇다면 우 리 는 어떻게 해야만 까다 로 운 문 제 를 해결 할 수 있 습 니까?두 가지 방법 이 있 습 니 다. 1) 백 스테이지 처리: 즉, AJAX POST 를 백 스테이지 에 제출 하고 서버 에 그림 을 올 린 다음 에 이 그림 의 크기 를 얻어 처리 합 니 다.2) 프론트 데스크 톱 처리: 자 바스 크 립 트 를 이용 하여 이 그림 의 크기 를 가 져 옵 니 다.분명히 첫 번 째 방식 은 매우 좋 지 않다.서버 에 파일 을 먼저 올 려 야 하기 때문에 파일 이 크 면 인터넷 에 접속 하 는 것 이 빠 르 지 않 고 오래 기 다 려 야 하기 때문에 표 시 를 해결 하지 않 습 니 다.
기능 분석:
여기 서 나 는 IE 와 FireFox 두 브 라 우 저의 다른 방법 만 소개 한다.IE6: 키워드: fileSize onreadystatechange complete 는 IE6 에서 Img 대상 의 fileSize 속성 을 통 해 파일 크기 를 얻 을 수 있 지만, 이 fileSize 속성의 정확 한 값 은 onreadystatechange 이벤트 의 complete 에 세 워 진 것 입 니 다. 즉,
<img src="" class="img"
onreadystatechange="Javascript:sizeCheck(this);">
function sizeCheck(img) {
if(img.readyState == "complete") {
alert(img.fileSize);
}
}
FireFox 3.0: 키워드: getAsDataURL () fileSize 는 FireFox 에서 안전 한 고려 에 있 습 니 다. 업로드 그림 의 전체 경 로 를 얻 을 수 없고 그림 이름 만 얻 을 수 있 습 니 다.그러나 브 라 우 저 는 nsIDOMFile 과 같은 인 터 페 이 스 를 제공 하기 때문에 getAsDataURL () 을 통 해 처 리 된 경 로 를 얻어 야 하지만 이 경 로 는 그림 src 디 스 플레이 에 영향 을 주지 않 습 니 다.nsIDOMFile 인터페이스:
DOMString getAsBinary();
DOMString getAsDataURL();
DOMString getAsText(in DOMString encoding);
<input type="file" name="uploadImg"
onchange="Javascript:checkFileChange(this);"
size="12"/>
function checkFileChange(obj) {
var img = document.getElementById("img");
img.src = obj.files[0].getAsDataUrl();
alert(obj.files[0].fileSize);
}
이상 은 두 개의 서로 다른 브 라 우 저의 처리 방식 입 니 다. 그러면 어떻게 그들 을 한데 융합 시 킬 수 있 습 니까?나 는 아래 에서 내 가 만 든 작은 예 를 붙 일 것 이다. 그 중에서 나 는 JQuery 를 사용 하여 대상 을 편리 하 게 얻 을 수 있다.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="lib/jquery-1.3.2.min.js" ></script>
<title> </title>
<style type="text/css">
.img {width:136px;height:102px;}
.imgError{border:3px solid red;}
</style>
<script type="text/javascript">
// 100K
var MAXSIZE = 100 * 1024;
//
var ERROR_IMGSIZE = " 100K";
//
var NOPHOTO = "imgs/nophoto.gif";
//
var isImg = true;
/** * Input file onchange * @params obj file * @return void **/
function checkFileChange(obj) {
//
$(".imgTable").removeClass("imgError");
updateTips("");
var img = $(".img").get(0);
var file = obj.value;
var exp = /.\.jpg|.\.gif|.\.png|.\.bmp/i;
if (exp.test(file)) {
//
if($.browser.msie) {
// IE
img.src = file;
} else {
img.src = obj.files[0].getAsDataURL();
sizeCheck(img);
}
} else {
img.src = NOPHOTO;
$(".imgTable").addClass("imgError");
updateTips(" ");
isImg = false;
}
}
/** * sizeCheck * @params img * @return void **/
function sizeCheck(img) {
//
$(".imgTable").removeClass("imgError");
updateTips("");
if ($.browser.msie) {
// IE
if(img.readyState == "complete") {
if (img.fileSize > MAXSIZE) {
$(".imgTable").addClass("imgError");
updateTips(ERROR_IMGSIZE);
isImg = false;
}else {
isImg = true;
}
}else {
$(".imgTable").addClass("imgError");
updateTips(ERROR_IMGSIZE);
isImg = false;
}
} else {
var file = $("input:file[name='uploadImg']")[0];
if (file.files[0].size > MAXSIZE) {
$(".imgTable").addClass("imgError");
updateTips(ERROR_IMGSIZE);
isImg = false;
}else {
isImg = true;
}
}
}
/** * updateTips * @params str * @return void **/
function updateTips(str) {
$("p#errorTips").text(str);
}
/** * commit * @return void **/
function commit() {
var isCommit = true;
var usrname = $("input:text[name='usrname']"),
email = $("input:text[name='email']"),
img = $(".img"),
file = $("input:file[name='uploadImg']"),
frm = document.frm;
isCommit = isCommit && isImg;
if(isCommit) {
frm.action = "about:blank"; frm.submit();
}
}
/** * errorImg * @params img * @return void **/
function errorImg(img) {
img.src = NOPHOTO;
}
</script>
</head>
<body>
<form name="frm" method="post">
<p id="errorTips"> </p>
<table cellpadding="1" cellspacing="0" width="350px" border="1">
<tr>
<td>
<label> :</label>
</td>
<td><input type="text" name="usrname" maxlength="50"/></td>
</tr>
<tr>
<td><label> :</label></td>
<td>
<input type="radio" name="sex" value="0"/>
<input type="radio" name="sex" value="0"/>
</td>
</tr>
<tr>
<td><label> :</label></td>
<td><input type="text" name="email" maxlength="100"/></td>
</tr>
<tr>
<td><lable> </label></td>
<td> <table cellpadding="0" cellspacing="0" class="imgTable">
<tr>
<td>
<img src="imgs/nophoto.gif" src="imgs/nophoto.gif" class="img" alt=" "
onerror="Javascript:errorImg(this);"
onreadystatechange="Javascript:sizeCheck(this);"/>
</td>
</tr>
<tr>
<td><input type="file" name="uploadImg"
onchange="Javascript:checkFileChange(this);
"size="12"/>
</td>
</tr>
</table>
<table>
<tr>
<td colspan="2">
<a href="Javascript:commit();"
rel="external nofollow" rel="external nofollow"
href="Javascript:commit();"
rel="external nofollow" rel="external nofollow" >
</a>
</td>
</tr>
</table>
</form>
</body>
</html>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.