본문 바로가기
JavaScript

[JavsScript] XMLHttpRequest

by 혀나Lee 2017. 12. 1.

파일 다운로드, 이미지 미리보기 등의 작업을 할 때 헤더에 토큰을 넣어야 하는 작업이 필요하다면 기본적인 URL 만으로는 안되고 XMLHttpRequest() 의 응답결과를 이용해야 한다.


아래 작업은 react에서 사용한 코드이다.


1. window.open

const detector = require('detector');

let uri = '메일 미리보기 주소';
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; //so you can access the response like a normal URL
xhr.onreadystatechange = function () {
    if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
        let file = new Blob([xhr.response], {type: xhr.response.type});
        let fileURL = URL.createObjectURL(file);
        window.open(fileURL);
    }
};
xhr.open('GET', uri, true);
xhr.setRequestHeader('Authorization', `Bearer ${토큰)}`);

xhr.send();


2. setState

let uri = '메일 미리보기 주소';
var xhr = new XMLHttpRequest();
xhr.responseType = 'blob'; //so you can access the response like a normal URL
xhr.onreadystatechange = () => {
    if (xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200) {
        let file = new Blob([xhr.response], {type: xhr.response.type});
        let fileURL = URL.createObjectURL(file);
        this.setState({imgUrl: fileURL});
    }
};
xhr.open('GET', uri, true);
xhr.setRequestHeader('Authorization', `Bearer ${토큰}`);

xhr.send();


3. 다운로드

let uri = '다운로드 주소'`;
let xhr = new XMLHttpRequest();
xhr.open("GET", uri, true);
xhr.responseType = "arraybuffer";
xhr.setRequestHeader("Authorization", `Bearer ${토큰}`;
xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {

        let blob = new Blob([xhr.response], {type: xhr.getResponseHeader("Content-Type")});

        // IE
        if (detector.browser.name === "ie") {
            window.navigator.msSaveBlob(blob, "파일명");
        } else {
            let fileUrl = window.URL.createObjectURL(blob);
            let a = document.createElement('a');
            a.setAttribute('style', 'display: none');
            a.setAttribute('href', fileUrl);
            a.setAttribute('download', "파일명");
            a.click();
            window.URL.revokeObjectURL(fileUrl);
        }
    }
};

xhr.send();


'JavaScript' 카테고리의 다른 글

[JavaScript] Generator  (0) 2019.01.16
JavaScript 표준  (0) 2018.09.13
form validate onsubmit  (0) 2018.07.25
JS 성능 비교 사이트  (0) 2018.07.20
[JavsScript, ReactJS] date format yymmdd  (0) 2017.01.23

댓글