首先,我正在使用 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")
}
})
我最终将图像上传到临时文件夹,然后分析用户数据,以了解是否要保存这些图像或删除它们
您可以使用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
};
参考资料: