fs.unlink不会删除文件

在我的Express服务器上,我想把用户上传的文件重命名为符合他们的用户名。 如果用户名上传新文件,则replace前一个文件。

代码如下:

var newPath = 'uploads/' + user.username + '.' + (file.extension).toLowerCase(); var basePath = path.resolve(__dirname + '../../../') + '/'; // Copy, rename and delete temp file var is = fs.createReadStream(basePath + file.path); var os = fs.createWriteStream(basePath + newPath); is.pipe(os); is.on('end', function (error) { if (err) return res.send(500); fs.unlink(basePath + file.path); }); 

问题是, fs.unlink(basePath + file.path); 实际上并没有删除我的机器上的旧文件(OSX 10.9.2)。 我怎样才能确保临时文件被删除?

文件basePath + file.path具有由读取stream的链接引用。 推迟文件内容的删除,直到文件的所有引用都closures。 您可能想在close事件中调用fs.unlink

我只是使用覆盖文件的fs.writeFile 。 我的代码在我的应用程序中同步,但它看起来像这样:

 if( !fs.existsSync( filename ) ) fs.openSync( filename, "wx" ); fs.writeFileSync( filename, data ); 

基本上我检查文件是否存在,如果没有,我打开它。 然后,我只是写入文件。 如果它是新的或已经存在的,当我看到它时,只有我的data出现在文件中,覆盖了那里的内容。