// 多图片上传
app.post('/api/uploadImages', upload2, (req, res) => {
console.log('Request Body (UID): ', req.body); // 确保 `uid` 存在
console.log('Request Files: ', req.files); // 确保文件数组存在
const files = req.files; // 获取上传的所有文件信息
if (!files || files.length === 0) {
return res.status(400).json({
errno: 1,
message: '没有上传文件',
});
}
// 获取服务器的 IP 地址
const ip = req.socket.localAddress === '::1' ? 'localhost' : req.socket.localAddress;
const port = 3000;
const baseUrl = `http://${ip}:${port}/uploads/`;
// 转换逻辑
const fileUrls = files.map(file => {
const url = `${baseUrl}${file.filename}`; // 拼接完整 URL
const name = file.filename; // 直接使用 filename 作为 name
return { name, url }; // 返回 { name, url } 对象
});
res.status(200).json({
errno: 0,
data: fileUrls, // 返回多个文件的 URL 数组
});
});
如上图,多图上传接口,在
console.log('Request Body (UID): ', req.body); // 确保 `uid` 存在
console.log('Request Files: ', req.files); // 确保文件数组存在
中已经打印出文件和uid值,证明已经传入后端,但是在配置中始终没有,如下:
const upload2 = multer({ // 多模块
storage: storage,
limits: { fileSize: 5 * 1024 * 1024 }, // 限制文件大小最大为5MB
}).array('files'); // 使用 array() 来接收多个文件
// Multer 配置
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'public/uploads/'); // 上传文件的存储路径
},
filename: (req, file, cb) => {
const uid = req.body.uid || 'unknown'; // 从请求体获取 uid
const sanitizedFilename = `${Date.now()}-${uid}-${encodeURIComponent(file.originalname)}`;
// 对文件名进行处理,确保文件名中的非英文字符不会出现乱码
// const sanitizedFilename = Date.now() + '-' + encodeURIComponent(file.originalname);
cb(null, sanitizedFilename); // 使用 URL 编码后的文件名
}
});
配置里面的const uid = req.body.uid
中req.body
始终是{}
,实在不知道到底是为什么,有没有知道原因的大佬?