在使用 multer 上传文件之前如何计算请求中收到的文件 - Express

问题描述 投票:0回答:2

首先,我正在使用 Node.Js、Express 和 Multer。
我进行了一个 API 调用,让用户将一些图像上传到他的个人资料中,每个用户的个人资料中只能有 5 张或更少的图像。
因此,当用户上传例如 2 张图像时,首先我应该在上传之前确定他是否可以上传这么多图像。

这里是

upload
对象的简化版本:

const storage = multer.diskStorage({
    destination: (req, file, cb) => cb(null, 'images'),
    filename: (req, file, cb) => cb(null, "some_random_string.jpg"),
})
const multi_upload = util.promisify(
    multer({
        storage,
        fileFilter: (req, file, cb) => {
            if (file.mimetype != 'image/jpg') return cb("Invalid file type, try uploading a '.jpg'")
            else cb(null, true)
        }
    }).array('images', 4)
)

这是我完成所有工作的地方:

router.post('/', validateToken, async (req, res) => {
    // I should know here how many files are sent troughthout the request
    var result = await queryPromise("SELECT * FROM images WHERE uid = 25")
    if (/* if the user can upload more images */) {
        // send the images
    } else {
        // res.send("You can upload only ${count} more images")
    }
})
node.js express multer
2个回答
0
投票

我最终将图像上传到临时文件夹,然后分析用户数据,以了解是否要保存这些图像或删除它们


0
投票

您可以使用Multer的

fileFilter
来限制上传的文件数量。如果抛出错误(例如,达到文件限制时),Multer 会自动删除任何已上传的文件,无论您使用的是磁盘存储还是 S3 等云存储。这个清理过程内置于 Multer 中。

fileFilter: (req, file, cb) => {
  if (!req.fileCount) { // Initialize the file count
          req.fileCount = 0;
  }
  const maxFileLimit = 1;

  if (req.fileCount >= maxFileLimit) {
     return cb(new Error(`Too many files. Maximum allowed is ${maxFileLimit}.`), false);
  }
  req.fileCount++ ; // Increment the file count for each processed file
  cb(null, true); // Accept the file
};

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.