错误ENOENT,打开' / tmp / 45e85388793de'在nodejs中

时间:2014-04-08 06:07:15

标签: node.js gridfs

我正在尝试在GridFS中保存项目及其文件。我想首先保存项目并使用" _id"项目的元数据作为我要保存文件的文件的元数据。当我尝试这样的时候,我会得到ENOENT,打开' / tmp / 45e85388793de'错误。这是我的代码

newProject.save(function (err,project) {
            if (err) {
              console.log('save error', err);
            }
             console.log("project added");
             var id=poject._id;
             var filepath    = req.files.file.path;
             var filename    = req.files.file.name;
           var writestream = gfs.createWriteStream({ filename: filename, metadata:id });
             console.log(filepath);                                                       
             fs.createReadStream(filepath)
             .on('end', function() {

             })
            .on('error', function(err) {
             console.log("error encountered"+err);//ENOENT,open error  
             })
            .pipe(writestream);
            });

为什么我收到此错误以及如何解决?

3 个答案:

答案 0 :(得分:5)

此上下文中的ENOENT表示"没有此类文件或目录。"这意味着您尝试阅读的filepath createReadStream不存在。

答案 1 :(得分:4)

我认为您收到此错误的原因是:

您的文件保存在临时位置。 当您进入回调函数时,您的文件将从该位置删除,并且您将收到“No such file”错误。路径和其他变量仍然作为js的一部分存在,这就是为什么你能够在控制台中打印它们。

解决方案: 上方(外部)回调函数使用以下命令将文件移动到其他永久位置:

        fs.rename(req.files.file.path, "./someKnownPath/filename");

记下该位置。在回调函数中,使用新位置作为路径,并尝试将文件保存在gridfs中。保存文件后,您可以从该位置删除该文件(/ someKnownPath / filename)。

答案 2 :(得分:1)

这个错误也发生在我身上。原因是临时目录不到位。我手动创建并尝试后,它工作。

现在我已经转移到通过node.js本身创建目录。