删除node.js中的文件无效

时间:2016-05-19 08:20:26

标签: node.js express

我正在使用带有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);
});

但该文件未被删除。似乎进程仍在使用文件,因为在我结束进程后,文件被删除了。

有人可以告诉我为什么吗? 如果我做错了,请告诉我一个好方法。

1 个答案:

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