Мне нужно загрузить файл с axios
и разархивировать его в памяти в электронном приложении.
Я читаю в некоторых потоках SO ( например ), которые adm-zip
поддерживает конструктор байтового буфера, но я не вижу этого в документации. Когда я извлекаю содержимое, он ведет себя так, как будто массив пуст, но это не так. Он просто создает файл и не вызывает ошибок. Я не хочу использовать request
, поскольку api помечен как устаревший. Мой код таков:
const axios = require("axios");
const AdmZip = require('adm-zip');
const url = "http://update-service.test.w3champions.com/api/maps";
const body = await axios.get(url, {
responseType: 'arraybuffer'
});
const data = body.data;
const zip = new AdmZip(data);
zip.extractAllTo(to, true);
Я чувствую себя супер глупо, потому что однажды он работал, а затем что-то изменил, и теперь, похоже, я больше не нахожу ошибку: / К сожалению, я не зафиксировал рабочий state ...
edit: Итак, мы разобрались: Electron делает некоторые странные вещи, которые возвращают буфер массива вместо буфера, который понадобится adm-zip. Как я ленив, добавил пакет arraybuffer-to-buffer
и теперь код работает:
const arrayBufferToBuffer = window.require('arraybuffer-to-buffer');
const url = `${this.updateUrl}api/${fileName}?ptr=${this.isTest}`;
const body = await axios.get(url, {
responseType: 'arraybuffer'
});
const buffer = arrayBufferToBuffer(body.data);
const zip = new AdmZip(buffer);
zip.extractAllTo(to, true);