ENOENT,没有这样的文件或目录,但文件存在

时间:2014-11-29 22:29:35

标签: jquery node.js intel-edison

我正在尝试使用英特尔Edison上的NodeJ构建一些东西。我正在使用插件:https://github.com/blueimp/jQuery-File-Upload和NodeJS服务器端部件。

然而,我一直在

fs.js:543
  return binding.rename(pathModule._makeLong(oldPath),
                 ^
Error: ENOENT, no such file or directory '/home/root/db/node_modules/blueimp-file-upload-node/tmp/8fa2946958c04ad8cb6def7b1e9dab01'
    at Object.fs.renameSync (fs.js:543:18)
    at IncomingForm.<anonymous> (/home/root/db/node_modules/blueimp-file-upload-node/server.js:248:16)
    at IncomingForm.EventEmitter.emit (events.js:98:17)
    at /home/root/db/node_modules/blueimp-file-upload-node/node_modules/formidable/lib/incoming_form.js:228:12
    at WriteStream.<anonymous> (/home/root/db/node_modules/blueimp-file-upload-node/node_modules/formidable/lib/file.js:70:5)
    at WriteStream.g (events.js:180:16)
    at WriteStream.EventEmitter.emit (events.js:117:20)
    at finishMaybe (_stream_writable.js:360:12)
    at afterWrite (_stream_writable.js:280:5)
    at onwrite (_stream_writable.js:270:7)

每当我尝试上传某些内容时。问题是文件/home/root/db/node_modules/blueimp-file-upload-node/tmp/8fa2946958c04ad8cb6def7b1e9dab01确实存在且我猜测我在文件夹中也拥有权限。

我尝试了几件事,但我真的被困在这里,我无法理解如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

错误之后,那个文件是旧名还是新名? (我曾经遇到两个线程无意中启动的情况,第二个发现该文件已经消失)。目标目录是否存在?任何错别字?

以下是关于重命名的linux手册页:

ENOENT oldpath命名的链接不存在;或者,newpath中的目录组件 不存在;或者,oldpath或newpath是一个空字符串。

编辑:这是一个nodejs错误,当它实际上是目标目录时,它会报告源文件丢失。要从命令行重现:

% touch /tmp/file.txt
% node -p 'fs = require("fs"); fs.renameSync("/tmp/file.txt", "/nonesuch/file.txt");'

打印:

Error: ENOENT, no such file or directory '/tmp/file.txt'
    at Object.fs.renameSync (fs.js:548:18)
    at [eval]:1:24
    at Object.<anonymous> ([eval]-wrapper:6:22)
    at Module._compile (module.js:456:26)
    at evalScript (node.js:536:25)
    at startup (node.js:80:7)
    at node.js:906:3

编辑:这是一种可能的方法来包装renameSync()来解决这个问题(未经测试!)

var _origRename = fs.renameSync;
fs.renameSync = function(from, to) {
    try { _origRename(from, to) }
    catch (err) {
        if (err.stack.indexOf('ENOENT') < 0) throw err;
        try { fs.statSync(from) } catch (err2) { throw err }
        throw new Error("ENOENT, no such file or directory '" + to "'");
    }
}