一、文件上传

1.首先我们文件上传的方法用到的是multipart/form-data,它是基于post方法来传递数据的,需求是实现类似与这样的:来一个弹框实现两个excel的文件导入

2.用vue的axios发起post请求:

3.引用elementPlus组件中的upload,注意:upload有默认的上传文件方式,并且是数组类型

<el-dialog v-model="dialogFormVisible" title="数据导入" id="input"><el-form :model="form"><el-form-item label="输入日期" :label-width="formLabelWidth"><el-input v-model="form.time" autocomplete="off"  placeholder="XXXX年X月X日"/></el-form-item></el-form><el-form-item label="数据" :label-width="formLabelWidth"><el-uploadref="uploadRefs":limit="1":auto-upload="false"action=""accept=".xlsx, .xls":on-exceed="exceedFile":on-error="handleError":on-success="handleSuccess":before-upload="beforeUPload":show-file-list="true"v-model:file-list="form.fileList"><el-button type="primary">选择文件</el-button></el-upload></el-form-item><el-form-item label="数据" :label-width="formLabelWidth"><el-uploadref="uploadRef":limit="1":auto-upload="false"action=""accept=".xlsx, .xls":on-exceed="exceedFile":on-error="handleError":on-success="handleSuccess":before-upload="beforeUPload":show-file-list="true"v-model:file-list="form.files"><el-button type="primary">选择文件</el-button></el-upload></el-form-item><template #footer><span class="dialog-footer"><el-button @click="dialogFormVisible = false">取消</el-button><el-button type="primary" @click="uploadExcel" @dialogFormVisible="false">确认导入</el-button></span></template></el-dialog>

4.在ts中先导入以下东西:

import {ref, reactive} from 'vue'
import {ElMessage, ElTable,ElUpload, ElButton,ElMessageBox} from 'element-plus'
import type {UploadInstance} from 'element-plus'
import {dataInput} from '@/api/emission';

5.在from表单中接收上传文件的数组:

const form = reactive<any>({fileList: [],files: []
})

6.之前看了一些上传文件的博客,好像都有const file = new FormData(),于是我也这样写了:

就发现了上传文件错误:formData变成[object FormData]

FormData 它的基本用法:

FormData 是一个构造函数,new FormData() 即可得到 FormData 对象:

const fd = new FormData() // 创建一个空白的 FormData 对象,里面没有包含任何数据。

调用 FormData 对象的 append(键, 值) 方法,可以向空白的 FormData 中追加键值对数据

但是事实上element Plus里的upload组件里面已经有写好的文件上传方法

并不需要我们再次将获取到的文件变为二进制,然后上传

7.于是我就改成了以下代码:

8.成功将文件转换为binary(二进制)并上传给后端!

9.ts文件上传的完整代码

// 数据导入
const beforeUPload = (file: any) => {const isExcel =file.type === 'application/vnd.ms-excel' ||file.type ===  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';if (!isExcel)ElMessageBox({title: '温馨提示',message: '上传文件只能是 xls / xlsx 格式!',type: 'warning',});return isExcel;
};
// 文件数超出提示
const exceedFile = () => {ElMessage.warning('最多只能上传一个文件!');
};
// 上传错误提示
const handleError = () => {ElMessage.error('导入数据失败,请您重新上传!');
};
//上传成功提示
const handleSuccess = () => {ElMessage.success('导入数据成功!');
};
// 文件上传
const uploadExcel = async (file :any) =>{
if(form.time=='' || form.fileList[0]== '' || form.files[0] == '')
return ElMessage.error('日期或者文件不能为空!')
let gasDataFile = form.fileList[0].raw
let electricityDataFile =form.files[0].rawawait dataInput({time : form.time,gasDataFile,electricityDataFile}).then((res:any) =>{if(res.message=='成功'){ElMessage.success('导入成功!');dialogFormVisible.value=false}else{ElMessage.error('导入失败!')}
})
getList()
if(gasDataFile!== '')
{form.time=''uploadRefs.value?.clearFiles()
}
if(electricityDataFile!== '')
{uploadRef.value?.clearFiles()
}
}

二、清空文件上传的列表

post请求成功后,清空文件上传的列表用clearFiles():

(1)因为我这里上传了两个文件,但清空方法都一样,所以以下我只举列了一个文件列表清空的方法:

先写ref="uploadRef(名字自取,但是不能写upload,它应该是关键字)",

 ref="uploadRef"

(2)引用并调用外部方法:

import type {UploadInstance} from 'element-plus'const uploadRefs = ref<UploadInstance>()

(3)使用清空文件上传的clearFiles():

uploadRef.value?.clearFiles()

将会成功清除!

vue3+ts+vite+elementPlus实现文件上传导入excle给后端,并且清空上传文件后的列表,以及formData变成[object FormData]的解决方法相关推荐

  1. 手把手教你从0到1搭建vue3+ts+vite+element-plus简易后台管理系统

    准备工作 首先请确保你的node.js版本>=12.0.0 因为vite的兼容性,Vite 需要 Node.js 版本 >= 12.0.0. 如果你不知道你的node.js的版本是多少,请 ...

  2. vue3+ts+vite后台管理模板

    vue3+ts+vite后台管理模板 支持前后端控制权限,使用uniapp+vue3+ts+elementplus+vite开发,码云地址:https://gitee.com/yongqiang062 ...

  3. Vue3+TS+Vite无法使用require导入图片的解决方法

    Vue3+TS+Vite无法使用require导入图片的解决方法 问题描述, 当使用const xxx = require('xxx')浏览器会报错, 为啥使用vue-cli脚手架时不会出问题? 是因 ...

  4. Vue3+TS+Vite+Element Plus搭建后台管理系统

    Vue3+TS+Vite+Element Plus搭建后台管理系统 1.简介 2.效果图 3.技术栈 4.项目目录 5.setting.js(全局配置文件) 6.路由router 7.状态管理stor ...

  5. 【Vue3+Ts+Vite】使用Vite与TS构建Vue3项目

    Vue3+Ts+Vite

  6. 基于Vue3+TS+Vite+Cesium创建项目

    基于Vue3+TS+Vite+Cesium创建项目 基于Vite构建项目 安装配置Cesium 创建Cesium三维视图 运行结果 随着近几年社会的发展,人们对三维可视化的需求也是越来越多,三维GIS ...

  7. vue3+ts+vite自适应项目——搭建项目

    系列文章目录 第一章:搭建项目 目录 系列文章目录 前言 一.搭建项目 二.安装sass 1.安装依赖 2.测试 三.引入element-plus 1.引入库 1.1 安装 2.2引入插件 2.3测试 ...

  8. wps文件上的logo怎么去掉_WPS卸载后Office图标显示出现问题怎么办?(解决方法)...

    由于当时电脑同时存在Microsoft Office和WPS Office两个办公软件,为了节省空间,卸载了WPS.但卸载后电脑上的Word.Excel.PowerPoint文档图标都显示有问题.改默 ...

  9. 某个应用导致html文件,某个应用导致你的默认浏览器设置出现问题(补丁又闯祸:Windows 10默认应用被重置 附解决方法)...

    某个应用导致你的默认浏览器设置出现问题(补丁又闯祸:Windows 10默认应用被重置 附解决方法),哪吒游戏网给大家带来详细的某个应用导致你的默认浏览器设置出现问题(补丁又闯祸:Windows 10 ...

最新文章

  1. oracle返回表id,在Oracle的函数中,返回表类型的语句
  2. NeurIPS 2021 | 图上不均衡表示学习新视野:基于拓扑结构的不均衡学习
  3. 行业场景智能应用,解锁边缘计算时代新机遇
  4. Ubuntu Server 之Apache2 虚拟主机配置指南(个人实践解读)
  5. 实实在在做一位教书匠(来自网络)
  6. 北京春雨天下软件公司的面试题
  7. CentOS6.4 配置mysql服务器启动多个端口,同步单表数据
  8. 通过代理截取并修改非对称密钥加密信息
  9. SIFT算法系列之尺度空间
  10. 华为的薪酬体系整体框架,值得收藏
  11. WORD图片打印预览没有
  12. 华为PUSH 日常问题解决方案
  13. 计算机容斥原理,三集合容斥原理解题技巧
  14. 如何永久关闭QQ广告弹窗
  15. 【OpenGL】室内3D弹球
  16. qpython3h手机版怎么发短信_阿里云短信 python3代码发送短信
  17. Pytorch 获取神经网络权重、偏执等参数
  18. 关于临时HY学长被安排拉二分题不想翻译找到DYM学长这件事
  19. java微信登录_java微信授权登陆
  20. amigo幸运字符什么意思_机器视觉之halcon入门(4)-字符识别

热门文章

  1. Hadoop默认端口说明
  2. 互联网金融研究组:P2P借贷平台:性质、风险与监管(上)
  3. Uncaught Error: only one instance of babel-polyfill is allowed
  4. 关于nesC语言的学习
  5. 卸载flannel安装kube-router网络插件
  6. 全球及中国核电行业建设动态及项目运营状况分析报告2021-2027年
  7. 为你解惑:js中function(e)的e是什么意思,代表什么。。。。
  8. sicily 1034 Forest
  9. 机器学习之SVM(支持向量机)
  10. 借我笑颜灿烂如春天,借我杀死庸碌的情怀