gpt4 book ai didi

node.js - 删除node.js中的文件不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:42 25 4
gpt4 key购买 nike

我正在将 Node.js 与 Express 结合使用。我正在尝试使用 Express 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);
});

但是文件没有被删除。看来该进程仍在使用文件,因为在我结束该进程后,该文件就被删除了。

谁能告诉我为什么?如果我做错了,请告诉我一个好的方法。

最佳答案

请在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() 在这里很重要,因为如果管道中止,流不会关闭。

关于node.js - 删除node.js中的文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37317676/

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