Nodejs 上传图片以后加一个uid值传到了后端,但是multer中无法使用,是为什么?

 // 多图片上传
  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.uidreq.body始终是{},实在不知道到底是为什么,有没有知道原因的大佬?

阅读 84
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏