fs.unlink不会删除该文件

时间:2014-04-22 16:26:47

标签: node.js express fs

在我的Express服务器上,我想获取用户上传的文件并重命名以匹配其用户名。如果用户名上传了新文件,则替换上一个文件。

以下是代码:

  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)。如何确保删除临时文件?

2 个答案:

答案 0 :(得分:1)

文件basePath + file.path具有读取流is的链接引用。应推迟删除文件内容,直到关闭对文件的所有引用。您可能需要在fs.unlink事件上致电close

答案 1 :(得分:0)

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

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

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

相关问题