gpt4 book ai didi

node.js - 使用 axios 下载 zip 并在内存中使用 adm-zip 解压缩( Electron 应用程序)

转载 作者:行者123 更新时间:2023-12-03 12:24:02 25 4
gpt4 key购买 nike

我需要下载一个文件 axios并在 Electron 应用程序中将其解压缩到内存中。
我读了一些 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);
我觉得 super 愚蠢,因为我有一次工作,然后改变了一些东西,现在我似乎没有再次发现错误:/遗憾的是我没有提交工作状态......
编辑:
所以,我们想通了: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);

最佳答案

它与 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();

关于node.js - 使用 axios 下载 zip 并在内存中使用 adm-zip 解压缩( Electron 应用程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63291156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com