我需要下载一个文件与axios和解压缩在内存中的电子应用程序。
我在一些SO线程(e.g.)中读到,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);我感到超级愚蠢,因为我曾经工作过一次,然后改变了一些事情,现在我似乎再也找不到错误了:/很遗憾,我没有承诺工作状态。
编辑:所以,我们知道了:电子做了一些奇怪的事情,返回一个阵列缓冲区,而不是一个缓冲区,这是adm所需要的。由于我很懒,添加了包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);发布于 2020-08-06 20:27:50
发布于 2020-08-06 20:28:18
它在axios中也是一样的。下面的代码是一个工作示例。
const axios = require('axios');
const AdmZip = require('adm-zip');
const f = async () => {
const url = 'http://update-service.test.w3champions.com/api/webui';
const body = await axios.get(url, {
responseType: 'arraybuffer',
});
var zip = new AdmZip(body.data);
var zipEntries = zip.getEntries();
// search for "index.html" which should be there
for (var i = 0; i < zipEntries.length; i++) {
console.log(zip.readAsText(zipEntries[i]));
}
// and to extract it into current working directory
zip.extractAllTo('.', true);
};
f();https://stackoverflow.com/questions/63291156
复制相似问题