在客户端读取xz文件

时间:2018-08-28 05:55:41

标签: javascript lzma xz

我在服务器上有较大的json文件,我用xz进行了压缩。我以为这样请求它们是很好的主意,即进行压缩,然后在客户端的javascript中解压缩它们。我正在尝试使用LZMA-JS库,但无法使其正常工作。

以下是相关的HTML代码段:

<script src="jquery-3.3.1.min.js"></script>
<script src="lzma-d-min.js"></script>
<script src="main.js"></script>

这是main.js的相关部分:

$.ajax({
  type: 'POST',
  processData: false,
  contentType: false,
  url: file_name+'.json.xz',
  beforeSend: function() { element.prop("disabled", true); },
  success: function(xz) {
    // http://cdn.jwebsocket.org/lzma-js/1.3.7/demos/simple_demo.html
    console.log(xz); // 1
    LZMA.decompress(xz,
      function on_finish(result, error) {
        console.log(result); // 2
        console.log(error); // 3
        data = JSON.parse(result);
      },
      function on_progress(percent) { }
    );
    element.prop("disabled", false);
  }
});

第一个console.log至少可以通过幻数�7zXZ来正确打印文件内容。第二个打印null,第三个打印此:

Error: corrupted input
    at y (lzma-d-min.js:1)
    at L (lzma-d-min.js:1)
    at t (lzma-d-min.js:1)

我没有正确使用库吗? 我可以使用Linux上的xz或python3的lzma或C ++的boost::iostreams::lzma_decompressor来解压缩有问题的文件。我找不到尝试使用的其他JavaScript库。

我愿意接受使用其他压缩格式的建议。

1 个答案:

答案 0 :(得分:1)

您正在混合格式。

XZ是存档格式。 LZMA是基础流压缩器。 LZMA-JS只能解压缩LZMA流,而不能解压缩XZ存档。

使用lzma命令行工具创建原始的LZMA流。