如何从上传文件中获取参数
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
我上传了一张照片,它成功运行了。但是我想给中间件多一个参数。我通过了,但我不明白。我想传递 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