node.js fs重命名为ENOENT

时间:2014-08-11 16:57:09

标签: node.js file-upload express

我正在尝试使用express框架在node.js中编写文件上传的处理程序。以下是它的原始骨架。

exports.handleUpload = function(req,res){

var temp_path = req.files.doc.path,
    target_path = './uploads/' + req.files.doc.name ;


fs.rename(temp_path, target_path, function(err){

    if(err){
        console.log(err);
    }

    fs.unlink(temp_path, function(){
        if(err){
            console.log(err)

        }

    })

    //Do stuff  

})

}

然而,偶尔(并不总是)执行renmae函数会出错,尤其是上传大文件时。

这是控制台从错误代码中缓存的内容

{ [Error: ENOENT, rename '/tmp/16368-19661hu.pptx'] errno: 34, code: 'ENOENT', path: '/tmp/16368-19661hu.pptx' }

来自:https://github.com/joyent/node/blob/master/deps/uv/include/uv.h

XX(ENOENT, "no such file or directory") 

uploads /目录确实存在,权限不是问题。如果是这样的话,每次都会失败,但事实并非如此。

1 个答案:

答案 0 :(得分:-1)

您正在使用/ tmp目录。操作系统可能正在删除文件,因为它可以为/ tmp目录执行此操作,因此"随机性"这个问题。在进行其他操作之前,请先使用fs.exists。