错误:ENOENT重命名节点/快递应用程序中的文件

我正试图上传一个文件在我的节点/快递应用程序,我收到以下错误:

{ [Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776'] errno: 34, code: 'ENOENT', path: '/tmp/64124a9886fdb03f1faee159bc533776' } /home/frankie/Projects/LP/routes/manager/deliverables.js:51 throw err; ^ Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776' 

这里是我的应用程序的相关代码:

 if (req.files.file.name !== '' && req.files.file.size !== 0) { // this will move the uploaded file from the tmp folder to the uploads folder fs.rename(req.files.file.path, app.get('loc') + "uploads/" + name + "-" + id + "/" + req.files.file.name, function (err) { if (err) throw err; 

当我检查/ tmp中有什么文件时:

 fiega@fiega:/tmp$ ll total 56 drwxrwxrwt 12 root root 4096 Dec 12 11:33 ./ drwxr-xr-x 23 root root 4096 Sep 27 22:54 ../ -rw-rw-r-- 1 fiega fiega 903 Dec 12 11:33 13a26570f87297fd7f61785ef7d8772b 

这是我如何使用身体分析器:

 app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.methodOverride()); 

有任何想法吗? 我试图改变我的整个我的应用程序的权限,但没有骰子。

你有没有检查你使用的目的地path是否存在? (也许你的意思是app.get('loc') + "/uploads/" …)

奇怪的是,当发生这种情况(源文件存在和目标目录不),错误信息只能指向源文件…所以检查是否不是问题。

请记住,如果要将上传的文件移动到/a/b/c.txt ,则/a/a/b必须已经存在。

另外,如果你需要将文件移动到不同的分区,你将不得不使用类似的东西,否则你会得到一个EXDEV错误。

可能不会帮助原来的海报,但万一有人遇到这个问题,并发现源和目的地都似乎存在,却遇到了这个错误,希望这会有所帮助。 当我遇到这个问题,这是我发现确切的问题 – 当我检查时,来源(文件的完整path)和目的地(目录)存在,但重命名是抛出ENOENT。

在我的情况下,解决scheme是要识别我正在使用目录创buildfunction的asynchronous版本来创build目标目录。 因此,在尝试重命名时,目标目录还不存在,但是一旦我检查完成,目录就在那里。 切换到目录创build的同步版本解决了这个问题。