我正在使用带有Express的Node.js。 我尝试使用快速js将文件发送到客户端后删除文件。
function deleteFile (file) {
fs.unlink(file, function (err) {
if (err) {
logger.error(err);
}
});
}
app.get("/deleteFileAfterDownload", function (req, res){
var fileName = "a.pdf"
var stream = fs.createReadStream(fileName);
var streamClosed = false;
req.on('end',function(){
if (!streamClosed){
stream.emit('close');
// I tried stream.destroy() but that is also not working
}
});
stream.on('close', function () {
streamClosed = true;
deleteFile(fileName);
});
req.on('data', function(){});
stream.pipe(res);
});
但该文件未被删除。似乎进程仍在使用文件,因为在我结束进程后,文件被删除了。
有人可以告诉我为什么吗? 如果我做错了,请告诉我一个好方法。
答案 0 :(得分:2)
请在deleteFile中添加一个日志,以便调用它。
尝试简化它:
var fileName = "a.pdf"
var stream = fs.createReadStream(fileName);
stream.pipe(res);
res.once("finish", function () {
deleteFile(fileName);
});
上一个示例仅在下载完成时删除文件, 如果你想无条件删除文件,请尝试以下方法:
var fileName = "a.pdf";
var stream = fs.createReadStream(fileName);
stream.pipe(res).once("close", function () {
stream.close();
deleteFile(fileName);
});
stream.close()在这里很重要,因为如果管道中止,流不会关闭。