解决办法
先说解决办法:
在接口设置请求头:'Content-Type': undefined
就这么简单
示例:api.js文件(项目已封装axios,以下仅展示API)
import Server from '@/axios/index.js'
import qs from 'qs'
import { SYS_CONFIG } from '@/config/constants'
const gsdpServer = SYS_CONFIG.devGsdpServer
/**
* @param {String} method 请求方式
* @param {String} url url
* @param {*} data 默认post参数
* @param {*} headers
* @param {*} withCredentials 携带cookie
* @param {String} responseType 返回类型
*/
export default {
// 文件上传接口
async fileUpload(data) {
return await Server.axios('post', gsdpServer, `/fileUpload/upload`, data, {
'Content-Type': undefined // 让浏览器自动设置 multipart/form-data
})
},
}
<el-upload
action=""
multiple
:show-file-list="false"
:http-request="httpRequest"
:before-upload="$utils.beforeUpload"
>
<el-button
size="small"
type="primary"
>上传文件</el-button
>
</el-upload>
差别示例
正确的上传请求
给后端发送的是 表单数据
错误的上传请求
给后端发送的是 请求负载
解析
在上面图片中可以看到,并未指定请求头,这是因为:在 axios
请求中,FormData
的请求头应由浏览器自动设置为 multipart/form-data
,无需手动指定。
所以我们直接设置'Content-Type': undefined
让浏览器自动设置请求头,恢复上传文件流