1

我在服务器上有大型 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)

我没有正确使用图书馆吗?xz我可以在 Linux、lzmapython3 或boost::iostreams::lzma_decompressorC++上毫无问题地解压缩有问题的文件。我找不到要尝试的其他 javascript 库。

我愿意接受使用不同压缩格式的建议。

4

1 回答 1

1

你在混淆格式。

XZ 是一种存档格式。LZMA 是底层流压缩器。LZMA-JS 只能解压缩 LZMA 流,不能解压缩 XZ 存档。

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

于 2018-08-28T06:08:06.213 回答