el-upload手动上传处理后端返回文件流

vue Element upload组件手动上传文件后处理后端返回文件流

action:上传文件的接口地址

vue 复制代码
  <el-upload
    ref="uploadRef"
    v-model:file-list="fileList"
    :action="Url"
    :auto-upload="false"
    :http-request="httpRequest"
  >
    <el-button type="primary">
      <el-icon><Upload /></el-icon>上传文件
    </el-button>
  </el-upload>

手动上传将auto-upload设置为false,重写默认的xhr上传方法,即配置http-request。

header里携带token:token在登录成功之后,后端返回给前端的,可以存在localStorage、cookies、vuex状态管理。 对二进制文件流的解析下载(用new Blob() 处理文件流)。Blob() 构造函数返回一个新的 Blob 对象。 blob的内容由参数数组中给出的值的串联组成。

js 复制代码
import { Upload } from '@element-plus/icons-vue';
import { ref } from 'vue';
import axios from 'axios';

const uploadRef = ref();

const httpRequest = item => {
  let formData = new FormData();
  formData.append('file', item.file);

  axios({
    url: Url,
    method: 'POST',
    responseType: 'blob',
    data: formData,
    'Content-Type': 'application/json',
    headers: headers,
  }).then(res => {
    // 处理res,进行下载,这里下载的是excel文件
      let blob = new Blob([res.data], { type: 'application/vnd.ms-excel' });
      let downloadElement = document.createElement('a');
      let href = window.URL.createObjectURL(blob); //创建下载的链接
      downloadElement.href = href;
      downloadElement.download = 'fileName.xlsx'; //下载后文件名
      document.body.appendChild(downloadElement);
      downloadElement.click(); //点击下载
      document.body.removeChild(downloadElement); //下载完成移除元素
      window.URL.revokeObjectURL(href); //释放掉blob对象
  });
};

点击事件中触发手动上传

ini 复制代码
uploadRef.value.submit();

要特别注意需要去配置responseType为blob

Blob 表示不可变、原始数据的类文件对象。当需要处理如图像、音频、视频等二进制数据时使用。响应体将被解析为一个 Blob 对象。

responseType 是在使用 XMLHttpRequest (XHR) 或 Fetch API 发起 AJAX 请求时设置的一个选项,用于指定期望从服务器接收到的响应数据类型。它会影响请求完成后如何解析响应体。这个属性通常在前端 JavaScript 中使用,特别是在异步数据加载、接口调用等场景。

相关推荐
web3d52011 小时前
Vue3 地图白屏排查清单:容器、弹窗与 ol-viewport 重复创建
vue.js·gis
hai_android16 小时前
一个公式看懂动态跨表查找:P8 + VLOOKUP
前端·javascript·vue.js
wdssmq19 小时前
「折腾」Vue 简单的状态管理实践
vue.js
Q264336502321 小时前
【有源码】基于Spring Boot和Vue的在线考试与交流系统-教育信息化背景下在线考试与交流一体化平台
java·vue.js·spring boot·mysql·spring·毕业设计·课程设计
苹果二1 天前
使用Vue的指南
前端·javascript·vue.js
害人终害己1 天前
‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
excel1 天前
研究 Vue 3 源码的收获
前端·vue.js
vx-程序开发2 天前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
ym hyd 1112 天前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
YZ1225522 天前
【Docker专题】使用Docker部署Vue-Flask项目前后端分离版【前端Docker部署】
前端·vue.js·docker