自定义el-upload 上传文件

前言

        最近在做一个文件上传的功能,后端接口写好了、发现前端上传文件的页面不会写……(我很笨的)然后我就找啊找发现element有个组件是<el-upload/>能直接上传文件。我就想直接用拿来改改改成自己想要的,可是就是这样我花了很多时间去都改不好。网上找的好多教程都是有一定基础的人看的,不适合我这种小白,我照着他们的改是一点都改不出来效果。后面我终于摸索出来了,想着这么麻烦肯定要水一篇博客才行。

需求

        我先讲一下我的需求啊,你们的和我不一样的就不用看了,免得浪费时间。就是el-upload默认是一个选中了就直接上传了(类似那种上传图片的),没有一个确定的按钮,我想分开来。点击一个按钮上传文件,再点击一个按钮确认上传。像下面这样

实现代码

 这是官方的api可以去看详细解释,但是太简洁了不是我这种笨蛋看得懂的。

Upload 上传 | Element Plus

        就是默认的el-upload 他有个参数是action填的是你上传的后端地址,你想自定义上传函数的话你要用http-request是覆盖它,这样就能自定义函数了。但是actio还不能省你得空着在那。

        auto-upload是关闭自动上传的,你要实现一个按钮上传一个按钮提交就得关闭这个!

然后去写handleUpload函数。

el-upload ref="upload" :show-file-list="true":auto-upload="false":http-request="handleUpload" action=" ":limit="1"><el-button type="primary">选择文件</el-button><template #tip><div class="el-upload__tip">只能上传xlsx文件</div></template></el-upload><el-button type="primary" style="margin-left: 50px;" @click='handleAction'>批量导入</el-button>

         handleUpload函数 就是绑定在el-upload上的http-request属性,这个名字可以你随便取,大概解释一下就是http-request他会给你一个参数,那个参数就是你选中的那个文件的参数。下面的data.file就是那个文件的具体参数。你们可以console.log去看看它是一个对象来着的,然后创建一个FormData,将那个file赋值给formData(我不太懂这是什么意思)我是在这看到这样赋值的 我照着做就能成功了。

        在下面就是一些axios请求后端接口了,url换成你们的就行,后面接的就是包含上传文件信息的formData了,最重要的是你请求的控制头一定要是  'Content-Type': 'multipart/form-data' 不然是传不了文件的,后端接口会报file null的错误。

 handleUpload(data) {console.log(data)const file = data.file;console.log(file)const formData = new FormData();formData.append('file', file);axios.post('http://localhost:9090/user/excelUpload', formData, {headers: {'Content-Type': 'multipart/form-data'}}).then(res => {console.log(res)if (res.data.code === '200') {this.$message({type: "success",message: "批量导入成功"})} else {this.$message({type: "error",message: res.data.msg})}this.$refs.upload.clearFiles(); // 清除上传的文件列表})}

        说到我就很迷惑我自己用了axios封装了一个request里面定义了请求头,是json的。后面我在使用的vue文件去import使用的时候,需要覆盖它这个请求头,换成 'Content-Type': 'multipart/form-data' 嘛,它竟然是不生效的!请求还是全局设置里面的json,害得我找半天都找不到原因,一直怀疑是现在的代码是有问题的。希望有懂的大佬指点一下。

request.interceptors.request.use(config => {// 设置请求头config.headers['Content-Type'] = 'application/json;charset=utf-8';return config
}, error => {// 请求失败,返回错误信息return Promise.reject(error)
})


完整的代码

<template><div style="margin: 30px; display: flex; justify-content: center;"><el-upload ref="upload" :show-file-list="true" :auto-upload="false" :http-request="handleUpload" action=" ":limit="1"><el-button type="primary">选择文件</el-button><template #tip><div class="el-upload__tip">只能上传xlsx文件</div></template></el-upload><el-button type="primary" style="margin-left: 50px;" @click='handleAction'>批量导入</el-button></div>
</template><script>
import axios from 'axios';
export default {methods: {handleAction() {this.$refs.upload.submit();},// 自定义上传方法handleUpload(data) {console.log(data)const file = data.file;console.log(file)const formData = new FormData();formData.append('file', file);axios.post('http://localhost:9090/user/excelUpload', formData, {headers: {'Content-Type': 'multipart/form-data'}}).then(res => {console.log(res)if (res.data.code === '200') {this.$message({type: "success",message: "批量导入成功"})} else {this.$message({type: "error",message: res.data.msg})}this.$refs.upload.clearFiles(); // 清除上传的文件列表})}}
}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/491374.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC 学习(六)之视图

目录 1 SpringMVC 视图介绍 2 JSP 视图 3 Thymeleaf 视图 4 FreeMarker 视图 5 XSLT 视图 6 请求转发与重定向 6.1 请求转发 (Forward) 6.2 重定向 (Redirect) 7 视图控制器 (view-controller) 1 SpringMVC 视图介绍 在 SpringMVC 框架中&#xff0c;视图可以是一个 J…

2.23日学习打卡----初学Nginx(二)

2.23日学习打卡 目录: 2.23日学习打卡一. Nginx 虚拟主机虚拟主机的分类Nginx支持三种类型的虚拟主机配置Nginx虚拟主机单网卡多IP配置Nginx虚拟主机_基于域名虚拟主机配置Nginx虚拟主机基于多端口的配置4 二. Nginx 核心指令root和alias指令的区别return指令rewrite指令rewrit…

机器学习打分函数在分子对接中的应用系列-GB_Score

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、GB-Score是什么&#xff1f;二、文献复现 -训练和验证环境1. GB score验证虚拟环境的配置2. Usage1- Preparing ligand and protein file2- Generating features3 - Repeat and extend current…

javascript监听浏览器离开、进入行为

document.addEventListener(visibilitychange, () > {if (document.visibilityState hidden) {alert(离开)}if (document.visibilityState visible) {alert(进入)}}) visibilitychange是浏览器新添加的一个事件&#xff0c;当其选项卡的内容变得可见或被隐藏时&#xff0…

一. demo

1. 舞台-场景-控件 import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.stage.Stage;import java.util.Arrays;public class Main e…

m估计及其c++简单实现

文章目录 什么是m估计怎么求解m估计呢&#xff1f;Huber函数时的线性m估计 什么是m估计 自20世纪60年代稳健统计建立以来&#xff0c;在国内外众多学者的研究之下&#xff0c;诞生了一系列稳健统计重要理论和成果。其中最主要且广泛使用的稳健统计有以下三类&#xff1a; L-e…

【数据集】世界水评估方案指标:灌溉面积/灌溉用水等

世界水评估方案指标 概述(Overview)数据下载(Data Download)案例1:F. Irrigated lands案例2:G. Irrigated water use参考World Water Development Report II-Indicators for World Water Assessment Programme 概述(Overview) 在关于全球环境变化和可持续发展的辩论…

搭建非maven spring boot项目 并且idea进行打包

1.所需jar包 2.搭建web项目 3 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; SpringBootApplication public class SpringBootTemplateApplications { public static void main(String\[\] ar…

利用缓冲区模拟进度条加载

界面呢非常简洁&#xff0c;代码也非常简单&#xff0c;非常适合有用来练手或者消遣。 以下就是进度条的样子咯&#xff0c;感兴趣的朋友可以自己去“美化”一下hh ProgressBar.c文件 用来定义ProcBar函数&#xff0c;该函数就是实现进度条的主核心代码&#xff0c;用“#”表示…

05 EXTI外部中断

一、中断系统 中断系统&#xff1a;管理和执行中断的逻辑结构。中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件——中断源&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继…

Java/Python/Go不同开发语言基础数据结构和相关操作总结-GC篇

Java/Python/Go不同开发语言基础数据结构和相关操作总结 1. 常见gc方式1.1 gc判断对象是否存活1.2 引用计数法1.2 标记-清除算法1.3 复制算法1.4 标记-压缩算法1.5 分代收集算法 2. java的gc方式以及垃圾回收器2.1 gc方式2.1 gc回收器2.1.1 Serial收集器2.1.2 ParNew收集器2.1.…

UE引擎, 在create blueprint from selection中, 点击select卡死问题处理

1. bug场景 在创建子类时点击select&#xff0c; ue会直接冻结无法点击 2. 解决方案 点击“Edit” -> “Edit Preference” 选择Asset Editor Open Location的选项从默认改为“Main Window”即可解决问题 3. 问题产生的原因 原因是UE的弹窗在拓展显示器或者笔记本显示…