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 中使用,特别是在异步数据加载、接口调用等场景。

相关推荐
宿67413 小时前
vue3-DOM树
前端·javascript·vue.js
宿67419 小时前
tsconfig.node.json
前端·javascript·vue.js
lllsure21 小时前
Vue&React Router
前端·vue.js·react.js
踩着两条虫2 天前
VTJ.PRO AI Agent 技术白皮书
前端·vue.js·低代码
java1234_小锋2 天前
Vue3专题 - 列表渲染
vue.js
小锋java12342 天前
【技术专题】Vue3 - 列表渲染
vue.js·vite
zho_uzhou2 天前
ubuntu服务端运行vue网页步骤
linux·服务器·vue.js·ubuntu
滴滴答答哒2 天前
VUE3+element-plus MultiSelect 多选下拉组件
前端·javascript·vue.js
其美杰布-富贵-李2 天前
04 watch 与 Vue 响应式数据流
前端·javascript·vue.js
其美杰布-富贵-李2 天前
03 ref、reactive 与 computed 响应式数据
前端·javascript·vue.js