Javascript 多文件上传错误(nodejs和react)
我已从客户处发送了此请求Javascript 多文件上传错误(nodejs和react),javascript,node.js,reactjs,file-upload,multer,Javascript,Node.js,Reactjs,File Upload,Multer,我已从客户处发送了此请求 if(file){ const data = new FormData() const fileName = Date.now() + file.name data.append('file', file) // file comes from state while submitting data.append('name', fileName) try { await axios.post(
if(file){
const data = new FormData()
const fileName = Date.now() + file.name
data.append('file', file) // file comes from state while submitting
data.append('name', fileName)
try {
await axios.post('/upload_image', data)
} catch (error) {
console.log(error.message);
}
}
Nodejs
const multer = require('multer')
// file upload
const storage = multer.diskStorage({
destination: (req, file, cb) => {
console.log(req.body);
cb(null, "./public/images/");
},
filename: (req, file, cb) => {
cb(null, req.body.name)
},
});
const upload = multer({ storage });
router.post("/upload_image", upload.single('file'), (req,res)=>{
console.log(req.body);
try {
res.status(200).json("file uploaded successfully")
} catch (error) {
console.log(error.message);
}
});
如果我在中打印req.body
router.post("/upload_image", upload.single('file'), (req,res)=>{
console.log(req.body.name)
console.log(req.file)
......................
.......................
})
在这里,将打印名称,req.file
也将打印。但是,里面
const storage = multer.diskStorage({
destination: (req, file, cb) => {
...................
..............................
},
filename: (req, file, cb) => {
console.log(req.body.name); //undefined
cb(null, req.body.name)
},
});
名称未定义,应用程序崩溃。为什么req对象没有转到diskStorage
函数。这里的问题是什么?来自:
请注意,req.body可能尚未完全填充。这取决于客户端向服务器传输字段和文件的顺序
如果将名称附加到前端中的文件之前,则名称应位于req.body.name
处
//在发送文件之前先附加名称
//所以我们可以在后端访问它
data.append('名称',文件名);
data.append('file',file);
或者,您可以直接将文件名与文件一起作为第三个参数发送到append函数:
data.append('file',file,fileName);
然后,您可以使用req.file.originalname
在后端访问文件名。当您在Node.js中处理文件上传时,请参考此免费文档