На 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?