VUE3 axios 上传文件到OSS_前端

这里我百度了一下

原来是post传参方式不对

post里面的数据放在params里面,这样是有问题的,在使用axios时,要注意到配置选项中包含params和data两者,以为他们是相同的,实则不然。

因为params是添加到url的请求字符串中的,用于get请求。

而data是添加到请求体(body)中的, 用于post请求。

然后我把params改为了data,后台还是接收不到,查阅了很多资料,需要把Content-Type为application/x-www-form-urlencoded,

jquery在执行post请求时,会设置Content-Type为application/x-www-form-urlencoded,所以服务器能够正确解析,而使用原生ajax、axios请求时,如果不显示的设置Content-Type,那么默认是text/plain,这时服务器就不知道怎么解析数据了,所以才只能通过获取原始数据流的方式来进行解析请求数据。

网上百度 的解决办法:


第一种

VUE3 axios 上传文件到OSS_vue.js_02

二、使用qs

安装qs,在 main.js里引入

import axios from ‘axios’;
import qs from ‘qs’;
Vue.prototype.$qs = qs;
在vue组件里面请求方法
let postData = this.$qs.stringify({
key1:value1,
key2:value2,
key3:value3,
});
this.$axios({
method: ‘post’,
url:‘url’,
data:postData
}).then((res)=>{
});

另外做个对比

未转换data格式的请求参数:

VUE3 axios 上传文件到OSS_VUE3 axios 上传文件到OSS_03

转换data后的的请求参数:

VUE3 axios 上传文件到OSS_ios_04


看我操作

首先使用第2种

npm install qs --save

VUE3 axios 上传文件到OSS_ios_05

VUE3 axios 上传文件到OSS_前端_06

VUE3 axios 上传文件到OSS_vue.js_07

这个是因为没安装qs报错

VUE3 axios 上传文件到OSS_ios_08

VUE3 axios 上传文件到OSS_javascript_09

安装了以后,还是500

VUE3 axios 上传文件到OSS_VUE3 axios 上传文件到OSS_10

VUE3 axios 上传文件到OSS_VUE3 axios 上传文件到OSS_11

第1种:

选择

VUE3 axios 上传文件到OSS_VUE3 axios 上传文件到OSS_12

首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。

很多时候,我们用 Ajax 提交数据时,也是使用这种方式。例如 JQuery 和 QWrap 的 Ajax,Content-Type 默认值都是「application/x-www-form-urlencoded;charset=utf-8」。


VUE3 axios 上传文件到OSS_前端_13

VUE3 axios 上传文件到OSS_前端_14

400 Request 由于客户端请求有语法错误,不能被服务器所理解。

看来都不好使呢?

传个别的试试?

VUE3 axios 上传文件到OSS_vue.js_15

500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。

VUE3 axios 上传文件到OSS_前端_16

但是我这样提交是可以的