将php base64 gzip转换为javascript

时间:2018-09-28 17:25:29

标签: javascript php base64 gzip

我正在尝试将以下代码从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();

我请求文件并将其转换为png类型的Blob。然后,我使用FileReader将文件读取为二进制字符串。然后,我将该二进制字符串gzip压缩,然后进行base64编码。我的最终输出以b64变量结尾。

但是,此输出最终不同于php输出。

在chrome控制台中播放,让我觉得二进制字符串可能是格式问题,因为我无法从控制台复制完整的字符串。

我还觉得两个gzip可能有所不同,因为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

请注意,除了第13个字符用“ C”代替“ A”外,字符串几乎相同。不确定是否足以将实际图像文件数据搞砸了。

任何想法如何使javascript版本具有与php版本相同的输出?事情变坏了哪一步?我真的需要它们具有相同的输出,因为第三方库会读取php版本创建的字符串。

0 个答案:

没有答案