quanyoumi/backend/middleware/upload.js

46 lines
1.2 KiB
JavaScript

const multer = require('multer');
const path = require('path');
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,
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()
);
const mimetype = /image|video/.test(file.mimetype);
if (mimetype && extname) return cb(null, true);
cb(new Error('只允许上传图片或视频文件'));
}
});
// 返回文件访问URL
const getFileUrls = (files) => {
const list = Array.isArray(files) ? files : [files];
return list.map(file => ({
url: `/uploads/${file.filename}`,
filename: file.filename,
mimetype: file.mimetype
}));
};
module.exports = { upload, getFileUrls };