Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置请求的内容类型为 multipart/form-data,或者你的自定义上传函数没有正确处理文件数据。

在 Vue.js 和 Element UI 的上下文中,如果你使用 http-request 来自定义上传,你需要确保以下几点:

  1. 请求类型 :确保你的请求是以 multipart/form-data 的形式发送的。这通常意味着你需要使用 FormData 对象来构建你的请求体。

  2. FormData :在 http-request 方法中,使用 FormData 对象来添加文件和其他可能需要的字段。

  3. 请求头 :虽然你通常不需要手动设置 Content-Typemultipart/form-data(因为浏览器会在你使用 FormData 时自动设置),但你需要确保其他必要的请求头(如认证令牌)被正确添加。

  4. 发送请求 :使用适合发送 multipart/form-data 请求的 HTTP 客户端(如 axios、fetch API 或 XMLHttpRequest)来发送你的请求。

下面是一个使用 http-request 和 FormData 的示例,它应该可以帮助你解决问题:

javascript 复制代码
<template>  
  <el-upload  
    class="upload-demo"  
    :http-request="customUpload"  
    list-type="picture-card"  
    :on-preview="handlePreview"  
    :on-remove="handleRemove"  
    :file-list="fileList"  
    multiple  
  >  
    <i class="el-icon-plus"></i>  
  </el-upload>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      fileList: [],  
    };  
  },  
  methods: {  
    customUpload(file) {  
      let formData = new FormData();  
      formData.append('file', file.raw); // 注意:这里使用 file.raw 取决于你的 file 对象结构,通常可能是 file  
  
      // 添加其他可能需要的字段  
      // formData.append('otherField', 'someValue');  
  
      // 使用 axios 发送请求(假设你已经安装了 axios)  
      axios.post('你的上传URL', formData, {  
        headers: {  
          'Authorization': 'Bearer 你的令牌',  
          // 注意:通常不需要手动设置 'Content-Type',因为 axios 会自动处理  
        },  
        onUploadProgress: progressEvent => {  
          // 处理上传进度(可选)  
        },  
      })  
      .then(response => {  
        // 处理上传成功的逻辑  
        // 例如,更新 fileList 或显示成功消息  
      })  
      .catch(error => {  
        // 处理上传失败的逻辑  
        // 例如,显示错误消息  
      });  
    },  
    handlePreview(file) {  
      console.log('preview', file);  
    },  
    handleRemove(file, fileList) {  
      console.log('remove', file, fileList);  
    },  
  },  
};  
</script>

注意

  • 在上面的示例中,我使用了 file.raw 来获取原始文件对象。然而,在 Element UI 的 <el-upload> 组件中,通常你只需要传递 file 对象(它本身就是一个 File 对象),除非你的 file 对象被以某种方式修改或封装了。
  • 如果你在使用 Element UI 的 file-list 属性并希望更新它,你可能需要在上传成功或失败时手动修改 fileList 数组。
  • 确保你的后端服务器能够处理 multipart/form-data 类型的请求,并且期望的字段名(在这个例子中是 'file')与你在 FormData 中使用的字段名相匹配。
相关推荐
web147862107237 分钟前
C# .Net Web 路由相关配置
前端·c#·.net
m0_748247808 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
飞的肖12 分钟前
前端使用 Element Plus架构vue3.0实现图片拖拉拽,后等比压缩,上传到Spring Boot后端
前端·spring boot·架构
青灯文案119 分钟前
前端 HTTP 请求由 Nginx 反向代理和 API 网关到后端服务的流程
前端·nginx·http
m0_7482548824 分钟前
DataX3.0+DataX-Web部署分布式可视化ETL系统
前端·分布式·etl
ZJ_.35 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
GIS开发特训营40 分钟前
Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍
前端·vue.js·前端框架·gis开发·webgis·三维gis
Cachel wood1 小时前
python round四舍五入和decimal库精确四舍五入
java·linux·前端·数据库·vue.js·python·前端框架
学代码的小前端1 小时前
0基础学前端-----CSS DAY9
前端·css
joan_851 小时前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui