У меня на сервере большие файлы 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, lzma
в python3 или boost::iostreams::lzma_decompressor
в C ++. Я не смог найти другую библиотеку JavaScript, чтобы попробовать.
Я открыт для предложений, использующих другой формат сжатия.