如何在 multer s3 中验证不同的文件类型?

Arp*_*hak 5 javascript amazon-s3 node.js multer multer-s3

我想处理和验证来自 multer 的视频和图像文件。Multer 中间件可以有 1 个视频文件和 10 个图像。我想验证它是否只有 10 个图像和 1 个视频文件。我还想验证文件大小。我想要视频有 25mb,图像有 5mb。但限制选项仅采用一种文件大小。这里它验证 5mb 文件。如何验证视频,应为 25mb。

const multerS3 = require('multer-s3');
const multer = require('multer');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
  accessKeyId: process.env.ACCESS_KEY_ID,
  secretAccessKey: process.env.SECRET_ACCESS_KEY,
  region: process.env.REGION
});

const fileFilter = (req, file, cb) => {
  console.log(file.mimetype);
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
    cb(null, true);
  } else {
    cb(null, false);
   }
  cb(null, true);
};

const middleware = function(req, res, next) {
  let upload = multer({
    storage: multerS3({
      s3: s3,
      bucket: process.env.BUCKET_NAME,
      acl: 'public-read',
      cacheControl: 'max-age=31536000',
      contentType: multerS3.AUTO_CONTENT_TYPE,
      metadata: function(req, file, cb) {
        // console.log('in callback');
        cb(null, { fieldName: file.fieldname });
      },
      key: function(req, file, cb) {
        // console.log('in callback 2');
        cb(null, Date.now().toString() + '-' + file.originalname);
      }
    }),
    fileFilter: fileFilter,
    limits: {
      fileSize: 1024 * 1024 * 5
    }
  }).fields([
    { name: 'images', maxCount: 10 },
    { name: 'video', maxCount: 1 }
  ]);

  upload(req, res, function(err) {
    console.log(err);
    next();
  });
};

module.exports = middleware;
Run Code Online (Sandbox Code Playgroud)

tur*_*hal 2

目前,multer 不支持它,

您可以关注 GitHub 上的讨论以获取更多详细信息:

问题 569
问题 833
问题 314