HTML 5 Ajax 파일 업로드 진행 막대 기반(jquery 버 전)
먼저 HTML 5 는 AJAX 로 데 이 터 를 제출 할 때 HTML 5 가 새로 추 가 된 대상 을 배 워 야 합 니 다:FormData
FormData 대상 은 append 방법 으로 key-value 의 데 이 터 를 추가 할 수 있 습 니 다.예전 에 우리 가 자주 사용 하 던 json 과 달리 바 이 너 리 파일 을 비동기 로 업로드 할 수 있 습 니 다.
1.FormDate 대상 의 생 성
var formData = new FormData();
2.FormDate 대상 에 데이터 추가
formData.append("catname", " ");
formData.append("age", 1); //
// , fileInputElement
formData.append("userfile", fileInputElement.files[0]);
// Blob formData
var oFileBody = "<a id="a"><b id="b">hey!</b></a>";
var oBlob = new Blob([oFileBody], { type: "text/xml"});
formData.append("webmasterfile", oBlob);
3.FormData 대상 사용
var xhr = new XMLHttpRequest();
xhr.open("POST", "upload");
xhr.send(formData);
HTML 부분FormData 대상 에 대한 간단 한 소개 가 끝 난 후에 페이지 의 HTML 코드 가 어떻게 쓰 여 있 는 지 살 펴 보 겠 습 니 다.
<img width="400" height="250"/><br />
<input type="file" id="pic" name="pic" onchange="showPic()"/>
<input type="button" value=" " onclick="uploadFile()" /><br />
<div id="parent">
<div id="son"></div>
</div>
맨 아래 div 는 진 도 를 표시 하 는 데 사용 되 기 때문에 대응 하 는 css 스타일 이 필요 합 니 다.스타일 은 아래 와 같 습 니 다.색상 이 예 쁘 지 않 으 니 직접 고 쳐 주세요.
<style type="text/css">
#parent{width:550px; height:10px; border:2px solid #09F;}
#son {width:0; height:100%; background-color:#09F; text-align:center; line-height:10px; font-size:20px; font-weight:bold;}
</style>
JS 부분중요 한 장면 이 왔 습 니 다.페이지 에 jquery 를 불 러 온 후에 자 바스 크 립 트 가 어떻게 쓰 였 는 지 보 겠 습 니 다.먼저 file 구성 요소 의 onchange 이벤트 방법 입 니 다.
function showPic(){
var pic = $("#pic").get(0).files[0];
$("img").prop("src" , window.URL.createObjectURL(pic) );
}
쇼 픽 의 첫 줄 은 file 대상 에서 파일 을 업로드 하 는 것 입 니 다.두 번 째 줄 은 img 에 src 속성 을 설정 하 였 습 니 다.페이지 에서 즉시 미리 보기 효 과 를 얻 을 수 있 습 니 다.uploadFile 방법 을 보기 전에 진도 이벤트(Progress Events)의 progress 를 간단하게 배 워 봅 시다.
Progress Events 규범 은 W3C 의 작업 초안 으로 클 라 이언 트 서버 통신 과 관련 된 사건 을 정의 합 니 다.이 사건 들 은 최초 로 XHR 작업 에 대한 값 이 었 으 나 현재 다른 API 에 의 해 참고 되 고 있다.다음 6 개의 진도 사건 이 있다.
loadstart:해당 데이터 의 첫 번 째 바이트 가 수신 되 었 을 때 터치 합 니 다.
progress:해당 기간 동안 지속 적 으로 촉발 합 니 다.//우리 하나만 보 자.
error:요청 에 오류 가 발생 했 을 때 발생 합 니 다.
abort:abort()방법 을 호출 하여 링크 를 종료 할 때 촉발 합 니 다.
load:완전한 데 이 터 를 받 았 을 때 촉발 합 니 다.
loadend:통신 이 완료 되 거나 error,abort 또는 load 사건 을 촉발 한 후 촉발 합 니 다.
progress 이 벤트 는 Mozilla 가 제출 한 것 입 니 다.이 이 벤트 는 브 라 우 저 에서 새 데 이 터 를 받 는 동안 주기 적 으로 실 행 됩 니 다.한편,onprogress 이벤트 처리 프로그램 은 이벤트 대상 을 받 습 니 다.target 속성 은 XHR 대상 이지 만 세 개의 추가 속성 을 포함 합 니 다.
length Computable:진도 정 보 를 사용 할 수 있 는 불 값 을 표시 합 니 다.
position:받 은 바이트 수 를 표시 합 니 다.
totalSize:Content-Length 의 해당 머리 에 따라 예상 되 는 바이트 수 를 표시 합 니 다.
이런 정보 가 있 으 면 우 리 는 사용 자 를 위해 진도 표시 기 를 만 들 수 있다.그러나 문제 가 또 생 겼 다.jQuery 의 ajax 방법 은 progress 사건 에 대한 조작 이 없다.이거 어떻게 해~~
자 료 를 찾 아 보 니 jQuery 의 ajax 방법 으로 호출 된 XML HttpRequest 대상 은 지정 할 수 있 습 니 다!!!
8453 줄 을 보면 바로 그것 이다.그래서 upload File 방법의 ajax 부분 에서 코드 가 이 스타일 로 바 뀌 었 습 니 다.
가장 중요 한 부분 코드:
function uploadFile(){
// , formData
var pic = $("#myhead").get(0).files[0];
var formData = new FormData();
formData.append("file" , pic);
$.ajax({
type: "POST",
url: "upload",
data: formData , // formData
processData : false,
// false Content-Type
contentType : false ,
// jQuery XMLHttpRequest , progress , ajax
xhr: function(){
var xhr = $.ajaxSettings.xhr();
if(onprogress && xhr.upload) {
xhr.upload.addEventListener("progress" , onprogress, false);
return xhr;
}
}
});
}
마지막 으로 onprogress 방법 을 추가 하여 전체 기능 에 마침 표를 찍 습 니 다.
/**
* , 0.05-0.1
*/
function onprogress(evt){
var loaded = evt.loaded; //
var tot = evt.total; //
var per = Math.floor(100*loaded/tot); //
$("#son").html( per +"%" );
$("#son").css("width" , per +"%");
}
마지막 으로 전체 페이지 의 코드 를 첨부 하여 비교 하기 편리 하 다.
<!DOCTYPE html>
<html>
<head>
<title>html5_2.html</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
#parent{width:550px; height:10px; border:2px solid #09F;}
#son {width:0; height:100%; background-color:#09F; text-align:center; line-height:10px; font-size:20px; font-weight:bold;}
</style>
<script type="text/javascript" src="js/jquery-1.9.1.js"></script>
<script type="text/javascript">
function showPic(){
var pic = $("#pic").get(0).files[0];
$("img").prop("src" , window.URL.createObjectURL(pic) );
uploadFile();
}
function uploadFile(){
var pic = $("#pic").get(0).files[0];
var formData = new FormData();
formData.append("file" , pic);
/**
* false jQuery formdata
* XMLHttpRequest formdata
*/
$.ajax({
type: "POST",
url: "upload",
data: formData ,
processData : false,
// false Content-Type
contentType : false ,
xhr: function(){
var xhr = $.ajaxSettings.xhr();
if(onprogress && xhr.upload) {
xhr.upload.addEventListener("progress" , onprogress, false);
return xhr;
}
}
});
}
/**
* , 0.05-0.1
*/
function onprogress(evt){
var loaded = evt.loaded; //
var tot = evt.total; //
var per = Math.floor(100*loaded/tot); //
$("#son").html( per +"%" );
$("#son").css("width" , per +"%");
}
</script>
</head>
<body>
<img width="400" height="250"/><br />
<input type="file" id="pic" name="pic" onchange="showPic()"/>
<input type="button" value=" " onclick="uploadFile()" /><br />
<div id="parent">
<div id="son"></div>
</div>
</body>
</html>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HTML5]01.기본 구조수업에서 자바를 상속, 인터페이스 예외처리 등 얼추 다 나가고 이제 html을 배우기 시작했습니다. html은 해본적이 거의 없기에 열심히 배우고 매일 수업 때 배운걸 적어둘려고 합니다. HTML5 문서의 기본 구조...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.