zip.js: формат файла не распознается, javascript - PullRequest
0 голосов
/ 02 ноября 2019

Я получаю ответ zip-файла от HTTP-запроса GET, который содержит два других файла с расширениями .log и .out. Я использую zip.js для успешного чтения данных из файла .log, но когда я пытаюсь передать текстовые данные, прочитанные из файла .log, в качестве аргумента события, я получаю сообщение об ошибке:

«Формат файла не распознан»

Я делаю это на клиентском JavaScript.

Вот мой код:

var xhr = new XMLHttpRequest();
xhr.onload = function(e) {
    var blobData = new Blob([this.response],{type : "application/zip"});
    zip.createReader(new zip.BlobReader(blobData), function(zipReader){
        zipReader.getEntries(function(entries){

                entries[1].getData(new zip.TextWriter(), function(text){
                        console.log(text);

                        this.Emit("dataReady", {
                            data : text});
                });
        }.bind(this));
    }.bind(this),this.onerror);
}.bind(this);

 xhr.open("GET","path/to/url/file.zip",true);
 xhr.setRequestHeader("Content-type","application/zip");
 xhr.responseType = 'blob';    
 xhr.send();

Я получаю сообщение об ошибке::

Формат файла не распознан.

Пожалуйста, посоветуйте, как я использую zip.js и впервые читаю ответ zip-файла из http-запроса. Спасибо!

1 Ответ

1 голос
/ 02 ноября 2019

Можете ли вы проверить, что вы используете правильный this в этой строке

this.Emit("dataReady", { data : text});

Я не уверен, куда вы отправляете текст, но вы, возможно, вызываете Emit на неправильном объекте. Если это так, то, пожалуйста, посмотрите на эту ссылку https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call и сделайте что-то вроде быстрого тестирования. Обратите внимание, я заметил, что вы уже связываете "это"

var xhr = new XMLHttpRequest();
var _root = this;
xhr.onload = function(e) {
    var blobData = new Blob([this.response],{type : "application/zip"});
    zip.createReader(new zip.BlobReader(blobData), function(zipReader){
        zipReader.getEntries(function(entries){

                entries[1].getData(new zip.TextWriter(), function(text){
                        console.log(text);

                        _root.Emit("dataReady", {
                            data : text});
                });
        }.bind(this));
    }.bind(this),this.onerror);
}.bind(this);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...