메뉴 건너뛰기

조회 수 586 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

hr(XMLHttpRequest) 객체는 서버와 데이터를 확인하기 위해 사용됩니다.

 

ajax또한 xhr 규격을 사용하여 동작하고 있고, 다양한 메소드를 통해 요청의 상태값이나 시간, 결과, 진행상태 등을 확인 할 수 있습니다.

 

여기서 xhr의 upload.onprogress 메소드를 사용하여 파일의 업로드 진행상황을 확인하고 UI적으로 페이지 진행상태를 표현 할 수 있습니다.

 

대량의 파일이나 다중으로 여러 파일을 넘길 때 상태를 알 수 있다보니 아무래도 기다리는데, 도움이 될 것 같습니다.

 

바로 예제를 통해 확인해 보겠습니다.

 

xhr.upload.progress

사용법 ajax로 넘길때 xhr메소드를 추가하고 내부에 upload.onprogress메소드를 추가하여 정의하고자 하는 파일 내용을 추가하면 됩니다.

xhr: function(){
	var xhr = $.ajaxSettings.xhr();
	xhr.upload.onprogress = function(e){
		var per = e.loaded * 100 / e.total;
		console.log(per);
	};
	return xhr;
},

 

 

사용예제

fileupload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<style>
	*{margin:0;padding:0}
	.progressContainer{position:relative;width: 450px;padding:20px 10px;border: 1px solid #eee;margin-top: 15px;background:#000;height:20px;}
	.progress{position:absolute;width: calc(100% - 20px);height: 20px;}
	.progressTotal{background: #5D5D5D;border-radius: 10px;}
	.progressNow{width: calc(0% - 20px);background: #FFF;border-radius: 10px;}
	.progressPer{background: transparent; text-align:center;color:#A6A6A6;}
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<body>
<h1>
	File Upload Test
</h1>

<P>  The time on the server is ${serverTime}. </P>
	<div style="width: 100%;padding: 25px;">
		<form id="fileForm" action="/upload.do" method="post" enctype="multipart/form-data">
			<input type="file" name="uploadFile" multiple>
			<button type="button" id="btn">전송</button>
		</form>
		<div class="progressContainer">
			<div class="progress progressTotal"></div>
			<div class="progress progressNow"></div>
			<div class="progress progressPer">0 %</div>
		</div>
	</div>
</body>
<script>
	$(function(){	
		$("#btn").on("click", function(){
			console.log("click Time : " + new Date);
			
			var form = $("#fileForm")[0];
			var formData = new FormData(form);
			$.ajax({
				type: "POST",
				enctype: 'multipart/form-data',
				url: "/upload.do",
				data: formData,
				processData: false,
				contentType: false,
				cache: false,
				xhr: function(){
					var xhr = $.ajaxSettings.xhr();
					xhr.upload.onprogress = function(e){
						var per = e.loaded * 100 / e.total;
						progressBar(per);
					};
					return xhr;
				},
				success: function (data) {
					console.log("SUCCESS : ", data);
				},
				error: function (e) {
					console.log("ERROR : ", e);
				}
			});
		});
	});
	
	function progressBar(per){
		if(per > 55){
			$(".progressPer").css("color", "#000");
		}
		per = per.toFixed(1);
		$(".progressPer").text(per+" %");
		$(".progressNow").css("width", "calc(" + per + "% - 20px)");
	}
</script>
</html>

btn이라는 버튼을 클릭하면 file에 존재하는 데이터를 넘기고 xhr메소드에 정의된 onprogress 메소드에 의해 결과 값을 노출 하는 예제입니다.

 

 

결과

극단적으로 퍼센트를 잘 보기위해 3천개의 텍스트파일을 업로드하는 테스트를 진행해봤습니다.

 


  1. No Image 25Mar
    by
    2021/03/25 Views 284 

    기본 동작 막기

  2. jQuery - 드래그앤드롭(DragAndDrop)을 통한 파일 업로드

  3. jQuery - checkbox 전체 선택, 해제 기능 및 단일 체크박스가 해제되었을때 전체 선택 해제 하기

  4. 09Mar
    by 조쉬
    2021/03/09 Views 586 

    jQuery - ajax xhr을 활용한 파일 업로드 진행 상태 확인하기

  5. jQuery - 드래그, 리사이즈 이벤트에 따른 영역 침범 막기

  6. jQuery - 클릭이벤트 동적 처리하기($("").click(), on('click') 차이)

  7. jQuery - radio, checkBox값 가져오기, 선택하기, 제어 등

  8. No Image 09Mar
    by
    2021/03/09 Views 1457 

    jQuery - ajaxSubmit 사용법 및 유의사항(페이지 리로드 현상)

  9. No Image 25Nov
    by
    2020/11/25 Views 1450 

    이미지 회전, rotate();

  10. No Image 25Nov
    by
    2020/11/25 Views 972 

    이미지 확대/축소

  11. No Image 24Aug
    by
    2020/08/24 Views 703 

    사업자 번호를 입력하면 자동으로 하이픈을 붙여줍니다.

  12. No Image 27Aug
    by
    2019/08/27 Views 1736 

    jquery 자식창에서 부모창으로 값 전달

  13. No Image 04Jun
    by
    2019/06/04 Views 853 

    jQuery 일반적 팁

  14. No Image 04Jun
    by
    2019/06/04 Views 745 

    JS 타이머 샘플

  15. No Image 04Jun
    by
    2019/06/04 Views 787 

    JS 날짜 자료 비교

  16. No Image 04Jun
    by
    2019/06/04 Views 867 

    텍스트 필드에 기본글이 마우스 클릭하면 지워지게 하기 폼필드 소스 내에 아래 태그를 삽입한다.

  17. No Image 04Jun
    by
    2019/06/04 Views 812 

    //ex)텍스트 박스 포커스 활성, 비활성 이벤트

  18. No Image 04Jun
    by
    2019/06/04 Views 694 

    JS 첵박스 샘플

  19. No Image 04Jun
    by
    2019/06/04 Views 780 

    체크박스 전체선택/해지

  20. No Image 21May
    by
    2019/05/21 Views 3097 

    jquery 드래그 앤 드롭 파일 업로드

Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved