在Node/Express应用程序中重命名文件时出现错误:ENOENT

8

我正在尝试在我的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

这就是我使用 body parser 的方法:

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

有什么想法吗?我尝试了更改整个应用的权限,但都没有效果。
2个回答

14

您是否检查了您正在使用的目标路径是否存在?(也许您是指 app.get('loc') + "/uploads/" ...)

奇怪的是,当发生这种情况(源文件存在而目标目录不存在),您收到的错误消息只指向源文件...所以请检查是否是这个问题。

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

此外,如果您需要将文件移动到另一个分区,您将需要使用类似于这个的东西,否则您将会收到一个EXDEV错误。


1

可能对原帖作者无法提供帮助,但是如果其他人遇到了这个问题并且发现源和目标都存在,但仍然遇到此错误,那么希望这篇文章能够帮到你。当我遇到这个问题时,我发现确切的问题就是 - 当我检查时,源(文件的完整路径)和目标(目录)都存在,但重命名仍然会抛出ENOENT错误。

在我的情况下,解决方案是认识到我正在使用异步版本的目录创建函数来创建目标目录。因此,在重命名尝试时,目标目录尚不存在,但是一旦我检查完成,目录就会出现。切换到同步版本的目录创建即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接