fs.createWriteStream错误:ENOENT。

5
我使用connect-busboy来处理文件上传,以下是代码:
req.busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {


    var type = mimetype.split('/')[1]
    var newName = (new Date()).valueOf();
    var saveTo = path.join(__dirname, '../../userUpload',req.user._id+'', newName+'.'+type);

    file.pipe(fs.createWriteStream(saveTo,{flags: 'w'}));

});

正如您所见,我试图将上传的文件保存在动态目录(以user._id命名)和新文件名中;

但是它给了我一个错误提示:

"Error: ENOENT, open '\userUpload\53a65fde4e22939811aa306d\1404636837084.mp4' " 

但是当我手动创建了user._id目录后,它就可以工作了,所以fs.createWriteStream无法正确处理动态目录?

我该怎么做呢?


2
创建文件之前,您需要确保路径存在。我会使用类似 mkdirp 模块的东西。在您的代码中,我可能还会使用 path.resolve 而不是 path.join,尽管这不能解决您在此处遇到的问题。 - Joe
我需要将上传的文件保存在以每个用户ID命名的文件夹中,mkdirp模块能实现这一点吗? - paynestrike
你应该从计算的路径中提取目录,如果目录不存在就创建文件夹,然后再创建写入流。 - Joe
1个回答

4

您尝试读取的目录不存在!请确保路径存在。


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