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
出现在文件中,覆盖了那里的内容。