猿问

axios做图片上传问题

因为axios传递的参数是json格式的,后台接受formdata形式的参数,所以在全局配置了

axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';

import qs from 'qs';

axios.defaults.transformRequest = [function (data) {

return qs.stringify(data)

}];

用qs把json数据转化成form-data格式了。

但是我现在在一个vue组里做图片上传的功能,代码如下:

onRead(file) {


    console.log(file);

    let param = new FormData();

    param.append('file', file.file, file.file.name);

    param.append('userId', this.userInfo.userId);

    param.append('token', this.userInfo.token);

    let config = {

      header: {'Content-Type': 'multipart/form-data'}

    }

    let that = this;

    this.$http.post( that.baseUrl + '/user/headPicImg', param, config).then((res) => {

      console.log(res);

      that.imgSrc = 'http://116.62.208.141:8181/' + res.data.headImgPath || '../assets/imgs/gift.png';

    })

  },

  我在这里传参格式已经是form-data的格式了。不需要使用全局配置的qs转化了。我把全局配置改成如下

  if(axios.method  === 'post' && axios.data.constructor !== FormData){

axios.defaults.transformRequest = [function (data) {


return qs.stringify(data)

}];

}

给转化的条件加了限制,但是这样一来,部分不是form-data传参格式的接口 在这个判断条件内但是并没有被qs转化成form-data格式的。请问我的判断条件写的有什么问题呢 ,怎么修改。


慕码人8056858
浏览 279回答 1
1回答

MMMHUHU

const service = axios.create({  baseURL: baseUrl,  // headers: {  //  'Content-Type': 'application/x-www-form-urlencoded'  // },  transformRequest: [function (data) {    // data['src'] = 'dev'    if (data instanceof FormData) {      return data    }    data = qs.stringify(data)    return data  }]})
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答