解决VUE3 Element Plus el-upload 上传文件file只有uid,获取不到文件流,无法使用http-request上传文件

解决办法

先说解决办法:

在接口设置请求头:'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

让浏览器自动设置请求头,恢复上传文件流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值