使用nodejs multer上传文件时如何创建year/month/day结构?

how to create year/month/day structure when uploading files with nodejs multer?

我想使用 multer 将文件上传到 year/month/day 的文件夹结构中。 喜欢upload/2021/06/27/filename。我该怎么做?

//configuring multer storage for images
const fileStorage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, 'upload/');
    },
    filename: (req, file, cb) => {
        cb(null, new Date().toISOString().replace(/:/g, '-') + '-' + file.originalname);
    }
});

您可以使用 fs 库函数创建自定义函数,

  • 初始化文件系统库
const fs = require("fs");
  • 根据输入参数当前日期
  • 创建return日期路径的方法
  • 例如:
    • 输入:new Date()
    • return: "2021/6/27"
function getDatePath(date) {
    return date.getFullYear() + "/" + (date.getMonth() + 1) + "/" + date.getDate();
}
  • 目录不存在递归创建,可以用try-catch块处理
function getDirPath(dirPath) {
    try {
        if (!fs.existsSync(dirPath)) fs.promises.mkdir(dirPath, { recursive: true });
        return dirPath;
    } catch (error) {
        console.log(error.message);
    }
}
  • 在目的地使用上述方法
//configuring multer storage for images
const fileStorage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, getDirPath('upload/' + getDatePath(new Date())));
    },
    filename: (req, file, cb) => {
        cb(null, new Date().toISOString().replace(/:/g, '-') + '-' + file.originalname);
    }
});