axios上传文件接收不到、为空
axios上传文件一般来说需要转FormData格式let fileData = file.file;// 拿到file后,转为FormData格式,这样再发送给后端就可以了let formData = new FormData();formData.append("token", that.token);formData.append("img", fileData);api_setUpload
·
axios上传文件
一般来说需要转FormData格式
let fileData = file.file; // 拿到file后,转为FormData格式,这样再发送给后端就可以了
let formData = new FormData();
formData.append("token", that.token);
formData.append("img", fileData);
api_setUploader(formData) // 发起请求(此处的axios做了封装)
.then((res)=>{
console.log(res)
})
.catch((err)=>{
console.log(err)
})
如果还是不行,请查看是否是以下问题,我的后端所有的数据格式都是FormData,所以对axios添加了请求拦截,中途用qs转一下,但是这样对文件流就造成了二次转换,所以还是发不过去,如果文件流在发起请求之前不转FormData,那连axios都进不去,所以不得已,我加了一个判断,查看打印js原型是否为空,如果为空:则说明是文件流,不去要再次转换,如果不为空:则说明是普通数据,需要转换,这样就可以了。
注:个人感觉这么做存在一定的风险,但是目前能力有限,如果有不正确的欢迎指正
补充:payLoad数组中传递的是字符串,FoemData传递的是键值对,file文件流传入axios中实际上是没有东西的,所有的都挂载原型链上,所以打印原型结果是数组为空
export const Service = axios.create({
timeout: 7000, // 请求超时时间
baseURL: ConfigBaseURL,
method: 'post',
headers: {
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
})
// 添加请求拦截器
Service.interceptors.request.use(config => {
// console.log(config)
// console.log(config.data)
console.log(Object.getOwnPropertyNames(config.data))
if(Object.getOwnPropertyNames(config.data)==''){
return config
}else{
config.data = qs.stringify(config.data);
return config
}
})
附上 上传图片是的打印截图:
更多推荐
已为社区贡献4条内容
所有评论(0)