JavaScript를 사용하여 파일 다운로드

  1. HTML의download속성을 사용하여 파일 다운로드
  2. 사용자 정의 작성 함수를 사용하여 JavaScript에서 텍스트 파일 생성 및 다운로드
  3. Axios라이브러리를 사용하여 파일 다운로드
JavaScript를 사용하여 파일 다운로드

이 기사에서는 JavaScript를 사용하여 파일을 다운로드하는 방법을 배웁니다. 자동 다운로드 파일을 사용하면 서버에 연결하지 않고도 JavaScript 기능을 사용하여 URL에서 직접 파일을 검색 할 수 있습니다. 사용자 정의 작성된 함수와 HTML 5의 다운로드 속성을 사용하여이를 달성 할 것입니다.

HTML의download속성을 사용하여 파일 다운로드

HTML 5의download속성은 사용자가 하이퍼 링크를 클릭 할 때 파일을 다운로드하는 데 사용됩니다. 앵커 태그-<a><area>와 함께 사용됩니다. 파일 소스를 지정하는href속성을 설정해야합니다. download속성 값은 다운로드 된 파일의 이름을 결정합니다. 이 값을 제거하면 다운로드 한 파일 이름이 원래 파일 이름과 동일합니다.

<!DOCTYPE html> 
<html> 
<head>
	<title>How to Download files Using JavaScript </title>
</head>
   <body>     
         <a href="apple.png" download="apple">
         <button type="button">Download</button> 
         </a> 
   </body> 
</html> 

위의 코드에서download속성을 사용하여apple.png이미지를 다운로드합니다. 먼저 이미지 주소가 포함 된 앵커 태그를 만들고 여기에download속성을 추가합니다. 그런 다음 파일 다운로드를 용이하게하는 다운로드 버튼도 만들었습니다.

사용자 정의 작성 함수를 사용하여 JavaScript에서 텍스트 파일 생성 및 다운로드

이 접근 방식은 즉석에서 텍스트 데이터를 만든 다음 JavaScript를 사용하여 텍스트 파일을 만든 다음 다운로드합니다.

알고리즘 다운로드

  • 텍스트 데이터를 입력 할 텍스트 영역을 만듭니다.
  • createElement속성을 사용하여<a>앵커 태그를 만들고 여기에downloadhref속성을 할당합니다.
  • encodeURIComponent를 사용하여 텍스트를 인코딩하고 구성 요소로 URI에 추가합니다. 이렇게하면 특정 특수 문자를 이스케이프 시퀀스 조합으로 대체하는 데 도움이됩니다.
  • 날짜 유형을text/plain으로 설정하고data:text/plain; charset = utf-8href의 속성 값으로 사용합니다.
  • 생성 된 요소를 문서 (HTML 페이지) 본문에 추가합니다.
  • element.click()을 사용하여 마우스 클릭을 시뮬레이션합니다.
  • 문서 본문 (HTML 페이지)에서 요소를 제거합니다.

클릭을 찾는 이벤트 리스너를 다운로드 버튼에 연결합니다. 텍스트 영역의 텍스트와 텍스트 파일의 파일 이름을 매개 변수로 사용하여 다운로드 함수를 호출합니다.

<!DOCTYPE html>
<html>

<head>
      <title>
            How to Download files Using JavaScript
      </title>
</head>

<body>

      <textarea id="text">DelftStack</textarea>
      <br />
      <input type="button" id="btn" value="Download" />
      <script>
            function download(filename, textInput) {

                  var element = document.createElement('a');
                  element.setAttribute('href','data:text/plain;charset=utf-8, ' + encodeURIComponent(textInput));
                  element.setAttribute('download', filename);
                  document.body.appendChild(element);
                  element.click();
                  //document.body.removeChild(element);
            }
            document.getElementById("btn")
                  .addEventListener("click", function () {
                        var text = document.getElementById("text").value;
                        var filename = "output.txt";
                        download(filename, text);
                  }, false);
      </script>
</body>

</html>

Axios라이브러리를 사용하여 파일 다운로드

이 접근 방식에서는Axios라이브러리를 사용하여 파일을 다운로드합니다. 접근 방식의 세부 사항을 진행하기 전에 Axios를 사용하여 파일을 다운로드하는 데 사용되는 데이터 유형 인Blob이 무엇인지 이해하겠습니다.

Blob

BlobBinary Large Object의 약자로 바이너리 데이터를 저장할 수있는 데이터 유형입니다. 프로그램, 코드 조각, 멀티미디어 개체 및 기타 JavaScript 기본 형식을 지원하지 않는 데이터와 같은 데이터를 나타냅니다.

파일 다운로드

  • URL이 파일 소스이고responseTypeblob인 Axios get요청을 만듭니다.
  • 다음 단계를 수행하여 Axios 요청에서 반환 된 promise를 해결합니다.
    • Blob 객체를 나타내는 URL을 포함하는 DOMString을 만듭니다.
    • createElement속성을 사용하여<a>앵커 태그를 만들고 여기에downloadhref속성을 할당합니다.
    • href를 첫 번째 단계에서 생성 한 URL로 설정하고download속성을 다운로드 한 파일의 이름으로 설정합니다.
    • 이 링크를 문서에 첨부하고.click()메소드를 사용하여 클릭을 시뮬레이션합니다.
    • 문서에서이 링크를 제거합니다.
<!DOCTYPE html>
<html>

<head>
      <title>How to download files using JavaScript</title>
</head>

<body>
      <button onclick="download()">
            Download Image
      </button>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js">
      </script>
      <script>
            function download() {
                  axios({
                        url: 'https://source.unsplash.com/random/500x500',
                        method: 'GET',
                        responseType: 'blob'
                  })
                        .then((response) => {
                              const url = window.URL
                                    .createObjectURL(new Blob([response.data]));
                              const link = document.createElement('a');
                              link.href = url;
                              link.setAttribute('download', 'image.jpg');
                              document.body.appendChild(link);
                              link.click();
                              document.body.removeChild(link);
                        })
            }

      </script>
</body>

</html>

여기서 우리는 사이트에서 임의의 이미지를 가져오고Axios를 사용하여 해당 이미지를 blob 형식으로 요청한 다음 앵커 태그의download속성을 사용하여 다운로드합니다. 이 방법은 이전 방법과 같이 사용자가 입력 한 일반 텍스트로 제한되지 않습니다. API에서 모든 종류의 데이터를 요청한 다음이 접근 방식을 사용하여 컴퓨터 내부에 데이터를 저장할 수 있습니다.

모든 주요 브라우저는Axios라이브러리를 사용하는 방법을 제외하고 위의 모든 방법을 지원합니다. Internet Explorer는 여전히 기본 ES6 약속을 지원하지 않으며 Axios는 이에 크게 의존합니다.

튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다
Harshit Jindal avatar Harshit Jindal avatar

Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.

LinkedIn

관련 문장 - JavaScript File