【问题标题】:How to create folder automatically before files upload via multer so that those files get stored in that created folder in nodejs?如何在通过multer上传文件之前自动创建文件夹,以便这些文件存储在nodejs中创建的文件夹中?
【发布时间】:2022-01-08 17:56:44
【问题描述】:

这是我上传多个文件的 multer 代码。

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, './public/files/'+ req.user.id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

var upload = multer({storage: storage});

这是在点击提交时提交文件的发布请求。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

所以我想要的是,我想首先使用生成的ID 的名称创建一个folder,可以从req.body 访问,然后将这些文件分别上传到该文件夹​​中。 但是由于我无法在上传之前先访问body,因此我无法创建相应的folder directory.。我能想到并实现它吗?

使用 fs-extra 包更新解决方案。

const multer = require('multer');
let fs = require('fs-extra');

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    let Id = req.body.id;
    fs.mkdirsSync('./public/files/'+ req.user.id + '/' + Id);
    cb(null, './public/files/'+ req.user.id + '/' + Id)
  },
  filename: function (req, file, cb) {
    x = file.originalname; //+path.extname(file.originalname);
  cb(null,x);
  }
});

var upload = multer({storage: storage});

这是在点击提交时提交文件的发布请求。

router.post(upload.array("FileUpload",12), function(req, res, next) {

//Here accessing the body datas.

})

【问题讨论】:

    标签: node.js file-upload multer create-directory


    【解决方案1】:

    您必须先安装fs-extra,它将创建文件夹

    为 multer 创建单独的文件夹,例如 multerHelper.js

    const multer = require('multer');
    let fs = require('fs-extra');
    
    let storage = multer.diskStorage({
    destination: function (req, file, cb) {
        let Id = req.body.id;
        let path = `tmp/daily_gasoline_report/${Id}`;
        fs.mkdirsSync(path);
        cb(null, path);
    },
    filename: function (req, file, cb) {
        // console.log(file);
    
        let extArray = file.mimetype.split("/");
        let extension = extArray[extArray.length - 1];
        cb(null, file.fieldname + '-' + Date.now() + "." + extension);
     }
    })
    
    let upload = multer({ storage: storage });
    
    let createUserImage = upload.array('images', 100);
    
    let multerHelper = {
        createUserImage,
    }
    
    module.exports = multerHelper;
    

    在您的路线中导入 multerhelper 文件

    const multerHelper = require("../helpers/multer_helper");
    
    router.post(multerHelper , function(req, res, next) {
    
    //Here accessing the body datas.
    
    })
    

    【讨论】:

    • 在哪里可以找到 helpers/multer_helper?
    • 你必须在你的项目文件夹中创建它
    • 我已根据您的回答更新了解决方案。这是对的吗?请在我的问题中添加“使用 fs-extra 包更新解决方案”后检查。
    • 我也为路线创建了单独的文件夹,所以这个方法对我有用
    • 尚未测试。会这样做并让你知道它是否有效。然后我也会赞成你的回答,当然谢谢! :)
    猜你喜欢
    • 2019-05-15
    • 2013-11-18
    • 2021-02-15
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多