如何在 React 和 Express 中一次上传文件和 json 数据
How to upload file and json data at once in react and express
我想发送文件以及来自表单的 JSON 数据
这是我的react句柄提交方法。
const formData = new FormData();
formData.append('File', selectedFile);
const data = {
name: 'vasu',
email: 'vasutiwari@gmail.com',
role: 'student'
}
formData.append('data', data);
axios.post('http://localhost:8000/users', formData ).then((result) => {
console.log('Success:', result);
})
.catch((error) => {
console.error('Error:', error);
});
这是我的server.js方法
app.post('/users', upload.single('File') , async (req, res) => {
console.log(req.file , req.body);
res.send(req.body);
})
这是我得到的输出
{
fieldname: 'File',
originalname: '4eec81ebddc991f6ff017e600dbf58ac.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'avatars',
filename: 'File-4eec81ebddc991f6ff017e600dbf58ac.png-1620467341921',
path: 'avatars\File-4eec81ebddc991f6ff017e600dbf58ac.png-1620467341921',
size: 426281
} [Object: null prototype] { data: '[object Object]' }
我不想要这个 [Object: null prototype] { data: '[object Object]' }
而我想要我发送的 JSON 对象 我也在使用
app.use(express.json())
app.use(express.urlencoded({extended: true}))
我也在用multer上传文件
这是mdn关于FormData
append()
方法参数的说法:
这可以是 USVString 或 Blob(包括 File 等子类)。如果指定了其中的 none 个,则该值将转换为字符串。
适用于 javascript 个对象的默认字符串转换结果为 '[object Object]'
- 这解释了您所看到的结果。
根据 multer 文档,除了文件之外,他们的中间件实际上似乎期望文本内容类型作为输入,所以这可能更好。请注意,express body 解析器不支持 multipart/form-data
内容类型 - 这是文件上传所必需的 - 因此它们根本不参与此处的解析。
您应该将每个文本输入一个一个地附加到 formData
对象,每个文本都将作为 属性 在 req.body
对象上可用:
formData.append('name', 'vasu')
formData.append('email', 'vasutiwari@gmail.com')
formData.append('role', 'student')
我想发送文件以及来自表单的 JSON 数据 这是我的react句柄提交方法。
const formData = new FormData();
formData.append('File', selectedFile);
const data = {
name: 'vasu',
email: 'vasutiwari@gmail.com',
role: 'student'
}
formData.append('data', data);
axios.post('http://localhost:8000/users', formData ).then((result) => {
console.log('Success:', result);
})
.catch((error) => {
console.error('Error:', error);
});
这是我的server.js方法
app.post('/users', upload.single('File') , async (req, res) => {
console.log(req.file , req.body);
res.send(req.body);
})
这是我得到的输出
{
fieldname: 'File',
originalname: '4eec81ebddc991f6ff017e600dbf58ac.png',
encoding: '7bit',
mimetype: 'image/png',
destination: 'avatars',
filename: 'File-4eec81ebddc991f6ff017e600dbf58ac.png-1620467341921',
path: 'avatars\File-4eec81ebddc991f6ff017e600dbf58ac.png-1620467341921',
size: 426281
} [Object: null prototype] { data: '[object Object]' }
我不想要这个 [Object: null prototype] { data: '[object Object]' }
而我想要我发送的 JSON 对象 我也在使用
app.use(express.json())
app.use(express.urlencoded({extended: true}))
我也在用multer上传文件
这是mdn关于FormData
append()
方法参数的说法:
这可以是 USVString 或 Blob(包括 File 等子类)。如果指定了其中的 none 个,则该值将转换为字符串。
适用于 javascript 个对象的默认字符串转换结果为 '[object Object]'
- 这解释了您所看到的结果。
根据 multer 文档,除了文件之外,他们的中间件实际上似乎期望文本内容类型作为输入,所以这可能更好。请注意,express body 解析器不支持 multipart/form-data
内容类型 - 这是文件上传所必需的 - 因此它们根本不参与此处的解析。
您应该将每个文本输入一个一个地附加到 formData
对象,每个文本都将作为 属性 在 req.body
对象上可用:
formData.append('name', 'vasu')
formData.append('email', 'vasutiwari@gmail.com')
formData.append('role', 'student')