我在服务器上有较大的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库。
我愿意接受使用其他压缩格式的建议。
答案 0 :(得分:1)
您正在混合格式。
XZ是存档格式。 LZMA是基础流压缩器。 LZMA-JS只能解压缩LZMA流,而不能解压缩XZ存档。
使用lzma
命令行工具创建原始的LZMA流。