【问题标题】:fs.createWriteStream error:ENOENTfs.createWriteStream 错误:ENOENT
【发布时间】:2014-08-26 23:15:35
【问题描述】:

我使用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 无法处理动态目录对吗?

我该怎么做?

【问题讨论】:

  • 在创建文件之前,您需要确保该路径存在。我会使用类似mkdirp 模块的东西。在您的代码中,我可能还会使用 path.resolve 而不是 path.join 尽管这不能解决您的问题。
  • 重点是,我需要将上传的文件保存在每个user_id命名的文件夹中,mkdirp模块可以实现吗?
  • 您应该从计算的路径中提取目录,如果文件夹不存在则创建该文件夹,然后创建写入流。

标签: node.js express upload multipart dir


【解决方案1】:

您要读取的目录不存在!确保路径存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-11
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多