在客户端读取 xz 文件

Read xz file on client side

我在服务器上有很大的 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 库来尝试。

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

您混淆了格式。

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

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