我需要下载一个文件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);
我觉得超级愚蠢,因为我有一次工作,然后改变了一些东西,现在我似乎没有再次发现错误:/遗憾的是我没有提交工作状态......
编辑:所以,我们想通了: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);