如何从上传文件中获取参数

how to get param from an upload file

我上传了一张照片,它成功运行了。但是我想给中间件多一个参数。我通过了,但我不明白。我想传递 roomID(在我的例子中是 40)。它不是未定义的!

我在哪里可以找到房间id?

如果我 console.log req.file 那么就没有 roomIdent。 req.params 为空

但我得到了所有其他参数,如文件名类型等...

Nodejs 中间件:

const fs = require('fs');
const path = require('path');
const multer = require('multer');

const Storage = multer.diskStorage({
  destination(req, file, callback) {
    callback(null, './uploads');
  },
  filename(req, file, callback) {
    callback(null, `${file.fieldname}_${Date.now()}_${file.originalname}`)
  }
});

module.exports = async (req, res, next) => {
  console.log(req.params);
  let upload = multer({
    storage: Storage
  }).single('photo');

  upload(req, res, err => {
    if(!req.file) {
      return res.json({
        upload: false,
        message: 'Bitte wählen Sie ein Foto oder Video aus.'
      });
    } else if (err instanceof multer.MulterError) {
      return res.json({
        upload: false,
        message: err
      });
    } else if (err) {
      return res.json({
        upload: false,
        message: err
      });
    }

    const allowTypes = ['image/jpeg', 'image/jpg' ,'image/png', 'image/webp', 'image/gif'];
  // Allowed extension
  const extension = path.extname(req.file.originalname);
  const anotherExtension = path.extname(req.file.filename);

  if(extension == '.jpg' || extension == '.jpeg' || extension == '.png' || extension == '.gif'
  || extension == '.webp') {

    if(anotherExtension == '.jpg' || anotherExtension == '.jpeg' || anotherExtension == '.png' || anotherExtension == '.gif'
    || anotherExtension == '.webp') {
  
      if(allowTypes.includes(req.file.mimetype)) {
        req.filename = req.file.filename;
        next();
      }
    }
  }
  });
};

React 本机抓取:

const upload = async ({localuri, filename, type, roomIdent}) => {
  try {
    const formData = new FormData();
    formData.append('photo', {
      uri: localuri,
      name: filename,
      type,
      roomid: roomIdent
    });

    const options = {
      headers: {
        'Accept': 'application/json',
        'Content-Type':'multipart/form-data'
      },
      method: 'POST',
      body: formData
    };

    const res = await fetch('http://xxxxx:3000/uploadphoto', options);
    const out = await res.json();
    return out;
  } catch(e) {
    return e;
  }
};

export default upload;

对于 RoomID,在 formData 中像这样附加它

const formData = new FormData();
formData.append('photo', {
  uri: localuri,
  name: filename,
  type,
});
formData.append('roomid', roomIdent);
... Now Continue...

然后在后端这样访问它

console.log(req.body.roomid) // This will log roomId on console