html 后端接受axios上传的表单和文件 表单中有其他属性,后端controller该怎么写?
时间: 2024-03-22 19:41:53 浏览: 60
假设你的后端使用的是 Node.js 和 Express 框架,可以使用 `multer` 中间件处理表单和文件上传。具体步骤如下:
1. 在前端使用 axios 发送 POST 请求,并将表单数据和文件打包成 FormData 对象:
```javascript
const formData = new FormData();
formData.append('name', 'John');
formData.append('age', 30);
formData.append('avatar', file);
axios.post('/api/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
console.log(response);
}).catch(error => {
console.log(error);
});
```
其中,`file` 是一个文件对象。
2. 在后端创建一个路由处理器(controller),使用 `multer` 中间件处理文件上传:
```javascript
const express = require('express');
const multer = require('multer');
const router = express.Router();
const upload = multer({ dest: 'uploads/' });
router.post('/upload', upload.single('avatar'), (req, res) => {
// req.file 是上传的文件信息
// req.body 包含表单中的其他属性
console.log(req.file);
console.log(req.body);
res.send('上传成功');
});
module.exports = router;
```
其中,`upload.single('avatar')` 表示只接受名为 `avatar` 的文件上传,上传的文件会保存在指定的文件夹 `uploads/` 中。`req.file` 就是上传的文件信息,`req.body` 包含表单中的其他属性。
3. 在主文件中导入该路由处理器并使用:
```javascript
const express = require('express');
const app = express();
const router = require('./router');
app.use(express.json());
app.use('/api', router);
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
其中,`express.json()` 用于解析请求体中的 JSON 数据,`/api` 是路由前缀,`router` 是上面创建的路由处理器。
注意,`multer` 中间件需要在 `Content-Type` 为 `multipart/form-data` 的情况下才能正常工作,所以前端发送请求时需要设置对应的 `Content-Type`。
阅读全文