【问题标题】:error ENOENT,open '/tmp/45e85388793de' in nodejs错误 ENOENT,在 nodejs 中打开 '/tmp/45e85388793de'
【发布时间】:2014-05-20 15:57:21
【问题描述】:

我正在尝试将项目及其文件保存在 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);
            });

为什么会出现此错误以及如何解决?

【问题讨论】:

    标签: node.js gridfs


    【解决方案1】:

    ENOENT 在此上下文中的意思是“没有这样的文件或目录”。这意味着您尝试使用createReadStream 读取的filepath 不存在。

    【讨论】:

    • 嘿我也面临同样的问题,我知道当目录不存在时会出现此错误。如您所见,我在保存项目后正在编写文件,因为我需要将文件链接到项目。这就是为什么我编写了代码以将文件保存在 project.save() 的回调函数中,但它在那里不起作用。如果我将相同的代码放在 .save 块之外,则相同的代码适用于相同的路径。 (我已经显示了内部和外部的路径,它们是相同的)
    【解决方案2】:

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

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      现在我已经转向通过 node.js 本身动态创建目录。

      【讨论】:

        猜你喜欢
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        相关资源
        最近更新 更多