【问题标题】:dynamic size limit for multermulter的动态大小限制
【发布时间】:2022-10-17 19:56:22
【问题描述】:

我有一个这样的 multer 中间件。我有一个设置表,其中有上传大小限制。 get size limit 是一个异步函数,它从这个模型中获取数据。但我不能在 multer 文件大小中使用它。因为它需要在它后面等待。 我能做些什么? 我想在设置中设置限制大小

const multer = require("multer");
const SettingModel = require("../../models/Setting");
const SequelizeService = require("../app/sequelize/sequelize.service");
let Setting = new SequelizeService(SettingModel);

async function getSizeLimit() {
  let setting = await Setting.findOne({ raw: true });
  return 1024 * 1024 * setting.sizeLimit;
}
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "./uploads/");
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname.replace(/\s+/g, ""));
  },
});

const fileFilter = (req, file, cb) => {
  // let response = new Response();
  if (
    file.mimetype === "image/jpeg" ||
    file.mimetype === "image/png" ||
    file.mimetype === "image/webp"
  ) {
    cb(null, true);
  } else {
    cb(new Error("Not an image! Please upload an image.", 400), false);
  }
};

exports.upload = multer({
  storage: storage,
  limits: {
    fileSize: getSizeLimit(),
  },

  fileFilter: fileFilter,
});

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

    我通过缓存我的设置并将中间件更改为:

    let multer = require("multer");
    const cache = require("memory-cache");
    
    upload_image = function (req, res, next) {
      try {
        let limit = cache.get("sizeLimit");
        let upload = multer({
          storage: multer.diskStorage({
            destination: function (req, file, cb) {
              cb(null, "./uploads/");
            },
            filename: function (req, file, cb) {
              cb(null, file.originalname.replace(/s+/g, ""));
            },
          }),
          limits: {
            fileSize: limit * 1024 * 1024,
          },
          onError: function (err, next) {
            next(err);
          },
          fileFilter: (req, file, cb) => {
            if (
              file.mimetype === "image/jpeg" ||
              file.mimetype === "image/png" ||
              file.mimetype === "image/webp"
            ) {
              cb(null, true);
            } else {
              cb(new Error("Not an image! Please upload an image.", 400), false);
            }
          },
        });
    
        upload.single("photo")(req, res, function (err) {
          if (err) {
            next(err);
          }
          next();
        });
      } catch (error) {
        throw new Error(error);
      }
    };
    
    exports.upload_image = upload_image;

    【讨论】:

      猜你喜欢
      • 2016-04-14
      • 1970-01-01
      • 2022-06-14
      • 2019-05-01
      • 2011-11-21
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      相关资源
      最近更新 更多