Подтвердить что ты не робот

Загрузка двоичных файлов с помощью Javascript

Я хочу загрузить двоичные файлы с помощью Javascript.

У меня есть служба REST, которая возвращает двоичные данные, и я хочу знать, возможно ли ее показать двоичный файл, в зависимости от расширения файла.

Это мой текущий код:

var xhr = new XMLHttpRequest;
xhr.open("GET", requestUrl);
xhr.addEventListener("load", function () {
    var ret = [];
    var len = this.responseText.length;
    var byte;
    for (var i = 0; i < len; i++) {
        byte = (this.responseText.charCodeAt(i) & 0xFF) >>> 0;
        ret.push(String.fromCharCode(byte));
    }
    var data = ret.join('');
    data = "data:application/pdf;base64," + btoa(data);

    window.open(data, '_blank', 'resizable, width=1020,height=600');
}, false);

xhr.setRequestHeader("Authorization", "Bearer " + client.accessToken);
xhr.overrideMimeType("octet-stream; charset=x-user-defined;");
xhr.send(null);

Спасибо!

4b9b3361

Ответ 1

Посмотрите статью MDN на XMLHttpRequest.

Если вы установите ответ XMLHttpRequest на ArrayBuffer, вы можете сделать следующее:

var xhr = new XMLHttpRequest();
xhr.open("GET", requestUrl);
xhr.responseType = "arraybuffer";

xhr.onload = function () {
    if (this.status === 200) {
        var blob = new Blob([xhr.response], {type: "application/pdf"});
        var objectUrl = URL.createObjectURL(blob);
        window.open(objectUrl);
    }
};
xhr.send();

Вариант 2:
Вы можете использовать Blob как ответ XMLHttpRequest. А затем, возможно, сохраните его в FileSystem (API FileSystem)

Он может выглядеть так:

var xhr = new XMLHttpRequest();
xhr.open("GET", requestUrl);
xhr.responseType = "blob";

xhr.onload = function () {
    onDownloaded(this);
};
xhr.send();

Вариант 3:
Если вы хотите только загрузить и "показать" изображения, вы можете легко сделать это так:

var img = new Image();

// add the onload event before setting the src
img.onload = function() {
    onImageDownloaded(img);
}

// start the download by setting the src property
img.src = requestUrl