问题描述
我正在使用fs.createReadStream
和npm软件包node-unzip-2
将zip文件加载并解压缩到我的服务器上,然后我要使用将文件解压缩为可执行文件的文件夹。但是,由于createReadStream是同步的和异步的,因此我遇到了事件问题。
spacerace.post('/file-upload',upload.single('file'),function (request,response) {
if (request.session.loggedin) {
request.socket.setTimeout(10 * 60 * 1000);
console.log('File is uploaded for: ' + request.session.teamID);
var p = `bots/${request.session.teamID}`;
deleteFolderRecursive(p);
console.log('Folder deleted');
fs.createReadStream(`uploads/${request.session.teamID}/${request.session.teamID}.zip`)
.pipe(unzip.Extract({ path: `bots/${request.session.teamID}` }))
.on('close',() => {
console.log('File Unzipped');
try {
var c = execSync(
path.join("server","exec.exe") + " -i " + request.session.teamID,{ timeout: 5000,stdio: "inherit" }
)
}
catch (ex) {
response.send("Cannot test file: " + ex).end();
console.log(ex);
}
console.log('File Tested');
response.status(200).end();
})
.on('finish',() => { console.log("part1done"); });
}
else {
response.redirect('./login');
}
});
'close'事件被触发两次; createReadStream
之后的文件读取了zip文件,而.pipe()
完成后的文件读取了。
我还尝试在'finish'事件中设置execSync
部分,但是在处理管道(因此解压缩)之前将其触发。
仅在完成.pipe()
之后,如何才能在“关闭”事件中执行零件?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)