为什么 LZMA-JS 压缩的字符串大小约为比压缩前大 10 倍

Why size of a string compressed by LZMA-JS is approx. 10x bigger then before the compression

我正在尝试找到一种方法来减小我发送到服务器的 BASE64 编码图像的大小。我发现 question 其中 LZMA 是建议的解决方案。但是,当我检查服务器上的请求大小时,我发现未压缩版本的大小小了约 10 倍。我错过了一步吗?我看到压缩的结果是 Byte Array 我尝试使用 .toString('utf8') 方法但它似乎只是加入数组。

/* LZMA COMPRESS / DECOMPRESS */
.factory('ooLZMA', ['CONFIG', function (CONFIG) {
  return {
    compress: function (string) {
       return LZMA.compress(string, CONFIG.stringCompression);
    },
    decompress: function () {
      return LZMA.decompress(string);
    }
  }
}])

在服务器上:

console.log('size', req.headers['content-length'] / 1048576, 'comp', req.body.compressed);

//"compressed"
size 0.1276998519897461 comp true
//raw BASE64
size 0.01657390594482422 comp false

这是格式转换造成的。 如果您发送 BASE64 编码,它已经是一个字符串,并且按原样发送到服务器。 而是在实际请求之前将数组转换为字符串。 如果您的数据不能压缩太多,压缩后的数据将具有相似的大小,但字符串转换操作会增加它,因为每个数字平均长度为 10/12 个字符。

如果您正在使用 jquery,我认为这是 post 数据的正确方法。

通过设置实际内容类型 'application/octet-stream' 并避免 preprocessing/convertion.