Как распаковать BLOB-объект, сжатый с помощью zlib.gzipSync в Node? - PullRequest
0 голосов
/ 12 декабря 2018

На Node-сервере, использующем Koa, я (я полагаю) сжимаю JSON-совместимую строку и отправляю ее клиенту следующим образом:

ctx.attachment('libraries.gz');
ctx.body = zlib.gzipSync(json).toString('base64');
ctx.status = 200;

Я попытался назвать файл "библиотеки".gz ", а также" library.json. "Ни одна из них не работает.

Я попытался удалить аспект .toString, в результате клиент получает пустой файл (демонстрируется cat и пытается открыть его в архиваторе).

На стороне клиента я использую «создание большого двоичного объекта и программный щелчок по метке <a> tag», чтобы открыть диалоговое окно загрузки файла.

xhr.onload = function() {
    if (this.status === 200) {
        // Create a new Blob object using the response data of the onload object
        var blob = new Blob([this.response], { type: 'application/json' });
        // Create a link element, hide it, direct it towards the blob, and then 'click' it programatically
        let a = document.createElement('a');
        a.style = 'display: none';
        document.body.appendChild(a);
        // Create a DOMString representing the blob and point the link element towards it
        let url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = 'libraries.json';
        // programatically click the link to trigger the download
        a.click();
        // release the reference to the file by revoking the Object URL
        window.URL.revokeObjectURL(url);
    } 
};

Я попытался установить для a.download значения libraries.json и libraries.gz.Насколько я могу судить, для gzip нет mimetype, так что я не уверен, что туда поместить, кроме application/json.

Во всех случаях клиент получает большой нечитаемый человеком файл, который представляется мне сжатым.Однако все попытки распаковать его (в командной строке, с помощью инструмента архивации моей ОС и т. Д.) Всегда терпят неудачу.Gunzip жалуется, что это не файл gzip, архиватор говорит, что есть проблема с файлом и т. Д.

Я ожидаю, что мое недоразумение вращается вокруг расширения файла и mimetype, а также отношений между этими двумя на стороне сервера и клиента,

Как распаковать большой двоичный объект, который был загружен с сервера, который сжал этот большой двоичный объект с помощью zlib.gzipSync?

...