■ Front-End ■/JavaScript

[JavaScript] 자바스크립트로 구현한 멀티파일 업로드와 다운로드

한길(One Way) 2023. 3. 1.

자바스크립트는 객체 기반 함수형 스크립트 언어이며 웹에서 중요한 위치를 차지하고 있다.

 

이번에는 화면 측(Front-End)에서 구현된 멀티파트 업로드와 다운로드에 대해서 알아보자. 코드들은 HTML5 기준으로 작성하였다. 웹에서 멀티파일 업로드/다운로드를 구현하려면 별도의 모듈을 사용해야 한다. 하지만 HTML5가 등장하고 나서 HTML과 JavaScript만으로 구현이 가능해졌다.

 

먼저 멀티파일 업로드를 살펴보자. 

file 타입의 입력항목에 multiple 속성을 정의하면 기능을 구현할 수 있다. 

<input id="files-upload" type="file" multiple>

 

아래는 멀티파트 업로드 HTML소스다. 

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>멀티파일 업로드</title>
</head>
<body>
       <form id="test">
             <fieldset>
                    <legend>멀티파일 업로드</legend>
                    <input id="files-upload" type="file" multiple><br>
                    <br> <input type="submit" value="업로드">
             </fieldset>
       </form>
</body>
</html>

 

아래는 처음 표시되는 화면이다.

 

 

파일선택을 클릭하면 파일선택이 가능한 열기창이 표시된다.

열기에서 1.txt와 2.txt 두 파일을 선택했다. 그리고 버튼을 클릭하면...


 

아래와 같이 파일선택 버튼 옆에 "파일 2개" 하고 표시된다.

참고로 하나의 파일을 선택할 경우에는 그 파일명이 표시된다.

 

업로드를 클릭하면 서버로 선택한 파일을 전송한다. 

서버에서는 요청스트림에서 파일 데이터를 받아 서버에 저장하면 된다.


 

아래는 멀티파트 다운로드 HTML소스다. 

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>멀티파일 다운로드</title>
<script src="multiFileDown.js"></script>
</head>
<body>
    <form id="test">
       <fieldset>
          <legend>멀티파일 다운로드</legend>
          <div>
              <input type="checkbox" name="file1" id="file1" value="/test1.zip" /> 
	      <label for="file1">test1.zip</label>
          </div>
          <div>
              <input type="checkbox" name="file2" id="file2" value="/test2.zip" /> 
	      <label for="file2">test2.zip</label>
          </div>
          <div>
              <input type="checkbox" name="file3" id="file3" value="/test3.zip" /> 
	      <label for="file3">test3.zip</label>
          </div>
          <div>
              <input type="checkbox" name="file4" id="file4" value="/test4.zip" /> 
	      <label for="file3">test4.zip</label>
          </div>
          <br>
          <div>
              <input type="button" value="Download All" onclick="suffix=1;downloadAll(this.form);return false" />
          </div>
       </fieldset>
    </form>
</body>
</html>

 

 

멀티파트 다운로드 JavaScript 코드다. 선택한 파일들을 다운로드한다.

var suffix = 1;
function downloadAll(oFrm) {
       var oChk = oFrm.elements["file" + (suffix++)];
       if (oChk) {
             if (oChk.checked) {
                    location.href = "http://oneway.com/files/test/" + oChk.value;
                    setTimeout(function() {
                           downloadAll(oFrm)
                    }, 1000);
             } else {
                    downloadAll(oFrm);
             }
       }
}

 

 

아래는 처음 표시되는 화면이다.

 

test1.zip, test2.zip, test3.zip 파일을 선택하였다.

test4.zip가 화면에는 보이지만 해당사이트에 test4.zip 파일은 존재하지 않아 다운로드되지 않는다.

 

Download All 버튼을 클릭하면 순차적으로 파일을 다운로드한다.

 

728x90

댓글