2013-12-12 36 views
8

我试图上传文件在我的节点/快递应用程序,我收到以下错误:错误: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目录的文件有:

[email protected]:/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()); 

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

回答

13

您是否检查过您使用的目的地路径? (也许你的意思是app.get('loc') + "/uploads/" ...)

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

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

此外,如果您需要将文件移动到不同的分区,您将不得不使用类似this的东西,否则将会出现EXDEV错误。

1

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

在我的情况下,解决方案是识别我正在使用目录创建功能的异步版本来创建目标目录。因此,在尝试重命名时,目标目录尚不存在,但只要我检查完成并且目录在那里。切换到目录创建的同步版本解决了问题。