目录
一.准备
千万千万不要忘记引form-data
const fs=require('fs')
const multipart = require('connect-multiparty')
const mult=multipart();
const router = express.Router();
const FormData=require('form-data');
二.封装接口
下面拿上传教师信息的接口举例
router.post("/addTeachers",mult,(req,res)=>{
let formData=new FormData()
console.log("files",req.files)
formData.append("file",fs.createReadStream(req.files.file.path))
let token = req.session.token;
console.log(formData);
axios({
method:'POST',
url:'/admin/insertTeachers',
processData: false,
contentType: false,
data:formData,
maxBodyLebgth:Infinity,
maxContentLength:Infinity,
headers:{
formData:formData.getHeaders(),
token:token
},
})
.then((r)=>{
console.log("成功",r);
res.send({err:0,mag:'导入成功'})
})
.catch((e)=>{
console.log("失败",e);
})
})
三.注意
注意上面第四行代码
formData.append("file",fs.createReadStream(req.files.file.path))
这里是req.files.file而不是req.file, req.file是空值
多文件上传
如果是多文件上传,这行代码应该换成:
for (let a in req.files) {
formData.append('file', fs.createReadStream(req.files[a].path))
}
请求头
注意这里的请求头
headers:{
formData:formData.getHeaders(),
token:token
}
注意这里要写成 formData:formData.getHeaders() ,不要写成下面这样:
content-type:multipart/form-data
四.js调用
这里少了一个文件类型判断,最好加上
function addTeachers() {
let formData = new FormData();
let file = document.getElementById("file").files[0];
formData.append("file", file);
axios({
method: "POST",
processData: false,
contentType: false,
url: `${head}admin/addTeachers`,
data: formData,
})
.then(() => {
alert('上传成功!')
})
.catch((err)=>{
console.log(err);
})
}