iview上传组件upload上传图片时,通过data附带参数,nodejs后台接收不到参数的解决方法

在做项目的过程中,使用了iview的upload上传组件,刚开始图片上传没有问题,但是通过data传参时,nodejs后台怎么也接收不到参数,一直显示“{}”。

然后,通过百度各种查询,也一直未找到合适的解决方案。心情那叫一个沉重啊,我开始思考,为什么一切正常,参数却无法接收。于是,按照程序员解决问题的惯例,打开F12。检查网络请求,看到请求,恍然大悟:

这用的是Form Data!怪自己大意了。我用的是express框架,用require('body-parser'),这个中间件来接收数据,但我的req.body总是为{}。最后我发现body-parser并不支持contentType: multipart/form-data的格式类型,也就是不支持formData格式。于是,我就是用multiparty中间件对formData类型的数据进行处理。结果成功接收到了数据。

下面我把代码贴出来,供大家参考:

前端代码

<template>
    <Upload
         ref="upload"
         :headers="{'Authorization':'Bearer '+token}"
         :show-upload-list="false"
         :default-file-list="defaultList"
         :on-success="handleSuccess"
         :format="['jpg', 'jpeg', 'png']"
         :max-size="2048"
         :on-format-error="handleFormatError"
         :on-exceeded-size="handleMaxSize"
         :before-upload="handleBeforeUpload"
         multiple
         type="drag"
         :action="uploadUrl"
         :data="uploadData"
         style="display: inline-block;width:58px;"
      >
</template>
<script>
export default {
 data() {
    return {
      uploadData:{userId:JSON.parse(localStorage.getItem("userInfo")).userId},
    }
  }
}
</script>

后端代码

router.post('/avatar', (req, res) => {
     var form = new multiparty.Form();
     form.uploadDir = "./public/images";
     form.parse(req, function (err, fields, files) {
         let userId=fields.userId[0];
         if (err) {
             throw err;
         } else {
           //新图片名
           //let avatar=userId+'.'+files.file[0].originalFilename.split('.')[1];
            let avatar=files.file[0].originalFilename;
           //同步重命名文件名
            fs.renameSync(files.file[0].path, "./public/images/" + files.file[0].originalFilename);
             var sql=`update user set avatar=? where userId=?`;
             query(sql,[avatar,userId]).then(result=>{
                if (result.affectedRows > 0) {
                    res.send({
                        code: 200,
                        avatar:avatar,
                        msg: 'updateAvatar success'
                    });
                } else {
                    res.send({
                        code: 401,
                        msg: 'updateAvatar error'
                    });
                }
             });
           
         }
     })
 })

最后打印出来的数据如下图:

以上就是解决这个问题的一些方法,希望对遇到同样问题的朋友,有所帮助。 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值