错误:在节点/快速应用程序中重命名文件时ENOENT

时间:2013-12-12 19:47:44

标签: node.js file-io express

我正在尝试在我的node / express应用程序中上传文件,我收到以下错误:

{ [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());

有什么想法吗?我已经尝试更改我的整个应用程序的权限,但没有骰子。

2 个答案:

答案 0 :(得分:14)

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

奇怪的是,当发生这种情况时(源文件存在且目标目录不存在),您获得的错误消息仅指向源文件...因此,请检查这是不是问题。

请注意,如果您要将上传的文件移至/a/b/c.txt,则/a/a/b必须已存在。

此外,如果您需要将文件移至其他分区,则必须使用this之类的内容,否则会出现EXDEV错误。

答案 1 :(得分:1)

可能无法帮助原始海报,但是如果其他人遇到此问题并发现源和目标都存在但仍然遇到此错误,希望这会有所帮助。当我遇到这个问题时,这是我发现的确切问题 - 当我检查时,源(文件的完整路径)和目标(目录)都存在,但重命名是抛出ENOENT。

在我的情况下,解决方案是认识到我正在使用目录创建功能的异步版本来创建目标目录。因此,在重命名时,目标目录尚不存在,但是一旦我检查它已经完成并且目录就在那里。切换到目录创建的同步版本可以解决问题。