优化验证报名信息对话框车牌号输入布局,使标签和输入框在同一行显示

This commit is contained in:
Yvan
2026-04-09 15:37:40 +08:00
parent 89960b1cb8
commit 4920620d2c
48 changed files with 4804 additions and 3916 deletions
+27 -12
View File
@@ -1,11 +1,27 @@
const multer = require('multer');
const path = require('path');
const { v4: uuidv4 } = require('uuid');
const { uploadBuffer } = require('../utils/minio');
const fs = require('fs');
// 确保上传目录存在
const uploadDir = path.join(__dirname, '../uploads');
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
// 配置本地存储
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, uploadDir);
},
filename: (req, file, cb) => {
const uniqueName = `${Date.now()}-${Math.random().toString(36).substring(7)}${path.extname(file.originalname)}`;
cb(null, uniqueName);
}
});
// 使用内存存储,文件不落盘,不限制大小
const upload = multer({
storage: multer.memoryStorage(),
storage,
limits: { fileSize: 50 * 1024 * 1024 }, // 50MB
fileFilter: (req, file, cb) => {
const extname = /jpeg|jpg|png|gif|mp4|mov|avi/.test(
path.extname(file.originalname).toLowerCase()
@@ -16,15 +32,14 @@ const upload = multer({
}
});
// 将 req.files 或 req.file 上传到 MinIO,返回 url 数组或单个 url
const uploadFilesToMinio = async (files) => {
// 返回文件访问URL
const getFileUrls = (files) => {
const list = Array.isArray(files) ? files : [files];
return Promise.all(list.map(async (file) => {
const ext = path.extname(file.originalname).toLowerCase();
const filename = `${Date.now()}-${uuidv4()}${ext}`;
const url = await uploadBuffer(file.buffer, filename, file.mimetype);
return { ...file, filename, url };
return list.map(file => ({
url: `/uploads/${file.filename}`,
filename: file.filename,
mimetype: file.mimetype
}));
};
module.exports = { upload, uploadFilesToMinio };
module.exports = { upload, getFileUrls };