преобразование php base64 gzip в javascript - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь преобразовать следующий код из php в javascript:

echo base64_encode(gzencode( file_get_contents("image.png") ));

Моя версия javascript приведенного выше кода выглядит следующим образом:

var zlib = require('zlib');

var xhr = new XMLHttpRequest();
xhr.open( "GET", "http://localhost:3000/image.png", true );

xhr.responseType = "arraybuffer";

xhr.onload = function( e ) {
    var arrayBufferView = new Uint8Array( this.response );
    var blob = new Blob( [ arrayBufferView ], { type: "image/png" } );

    var reader = new FileReader();
    reader.onloadend = function () {
            var blobStr = reader.result;
            zlib.gzip(blobStr, function(err, buf) {
                var b64 = new Buffer(buf).toString('base64');
                console.log(b64);
        });
    }
    reader.readAsBinaryString(blob);

};
xhr.send();

Я запрашиваю файли преобразовать его в BLOB-объект типа PNG.Затем я использую FileReader для чтения файла в виде двоичной строки.Затем я gzip эту двоичную строку, а затем base64 кодировать ее.Мой окончательный вывод заканчивается в переменной b64.

Однако этот вывод в конечном итоге отличается от вывода php.

Игра в консоли Chrome заставляет меня чувствовать, что это может быть проблема с форматированием двоичной строки, поскольку я не могу скопировать всю строку из консоли.

Также я чувствую, что могут быть различия в двух gzips, поскольку echo base64_encode(gzencode( "test" )); возвращает

H4sIAAAAAAAACytJLS4BAAx + f9gEAAAA

между тем

var zlib = require('zlib');
zlib.gzip("test", function(err, buf) {
    var b64 = new Buffer(buf).toString('base64');
    console.log(b64);
});

возвращает

H4sIAAAAAAAAAytJLS4BAAx + f9gEAAAA

, обратите внимание, что строки почти идентичны, за исключением "C" вместо "A" в качестве 13-го символа.Не уверен, что этого достаточно для того, чтобы все испортить в реальных данных файла изображения.

Есть идеи, как сделать так, чтобы версия javascript имела тот же результат, что и версия php?На каком этапе дела идут плохо?Мне действительно нужно, чтобы они имели одинаковый вывод, потому что сторонняя библиотека читает строки, созданные в версии php.

...