【发布时间】:2019-06-25 02:54:38
【问题描述】:
我有一个 zip 文件,其中包含类似的文件夹
1234/pic1.png
1234/pic2.png
1234/data.xlsx
我正在尝试使用 node-stream-zip 提取电子表格(失败,所有文件)。
const StreamZip = require('node-stream-zip');
const zip = new StreamZip({
file: path.join(downloadsDir, fileToFind),
storeEntries: true
});
zip.on('ready', () => {
if(!fs.existsSync('extracted')) {
fs.mkdirSync('extracted');
}
zip.extract('1234/', './extracted', err => {
console.log(err);
});
zip.close();
});
这会产生
EBADF:错误的文件描述符,读取
在提取的文件夹中是 png 文件之一。但是,当按照guide 仅提取 xlsx 文件时,似乎 xlsx 文件是导致此错误的文件。
zip.extract('1234/data.xlsx', './extracted.xlsx', err => {
console.log(err);
});
xlsx 文件有问题吗?我可以手动打开它。它与权限有关吗?节点?这个特殊的包?
【问题讨论】:
-
zip.close()是他extract()函数回调的“外部”。因为这些是异步方法,这意味着它会在您实际执行任何操作之前关闭 zip 文件。因此,尝试“提取”已关闭文件描述符的方法会导致“错误文件描述符”。将.close()“放在”回调方法中。就像文档实际向您展示的那样