node传formdata数据

本文介绍了如何在Node.js中使用form-data模块封装接口进行文件上传,包括单文件和多文件的处理,以及请求头的设置。特别强调了`req.files`对象的正确使用和请求头的正确配置。
摘要由CSDN通过智能技术生成

目录

一.准备

二.封装接口

 三.注意

 四.js调用


一.准备

千万千万不要忘记引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);
  })
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值