element-ui附件上传及在线查看详细总结,后续赋源码
一、附件上传
1、在element-ui上面复制相应代码

a、accept="image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型,若是不限制,可以直接将accept=‘all'即可;
b、:action="action" 这个属性就是你的上传附件的地址;
一般情况下,上传一个文件,后端会给两个接口,第一个接口就是写在action里面的,这个接口的作用是返回一个id或则一个其他的唯一属性;接着第二个接口就是上传附件的接口,这个返回的唯一属性会被当做第二个接口的参数提交,此时就已经完成了附件的上传。
二、在线查看
1、首先先安装依赖包
用的是vue-office,地址:vue-office简介 | vue-office (501351981.github.io)
#docx文档预览组件
npm install @vue-office/docx vue-demi
#excel文档预览组件
npm install @vue-office/excel vue-demi
#pdf文档预览组件
npm install @vue-office/pdf vue-demi
//如果是vue2.6版本或以下还需要额外安装 @vue/composition-api
npm install @vue/composition-api
2、在vue文件中引入vue-office

3、开始判断文件的类型
接着我们要想实时的看到自己的附件,那么肯定一点就是得区分我们得附件类型
判断文件的类型我这里有两个方法推荐:
第一种:就是运用计算属性和includes来设置一个变量,再根据变量使用v-if控制显示

第二种:js的endsWith() 该方法用于测试字符串是否以指定的后缀结束,将获取到的文件名放入该方法中,判断后缀类型,不过这里的判断返回的是布尔值,然后再配合v-if使用以控制显示。
4、添加点击事件
这里设计的在线预览是点击附件后直接在下方显示
找到上传附件时的钩子,根据业务需求,判断是上传之前可以看还是上传之后可以看,有两种情况
第一种:在上传附件之前就想查看
这种情况我先放一下,因为这里我先讲得是直接上传附件,在上传之前查看,一般用在手动上传的时候,我后续再更,但是放心,我都会更新记录下来的~~
第二种:在上传附件成功之后再查看
给附件绑定一个点击事件:on-preview="handlePreview",绑定这个事件之后,可以获取到参数里面的file,即一个对象,将这个对象赋值给一个新的对象this.currentFile = file,而这个currentFile在判断类型时不可缺少的;之后,取currentFile里面raw赋值给vue-office标签里的src属性就可以了
第三种:同时拥有,哈哈哈哈这种就把前两种都写上就行了
目前这一块我是以组件的形式在使用,毕竟用的比较多,这样更方便些,以上是我自己的总结,主要是给自己看的,因为我有健忘,一段时间不用就会忘记,大家要是有疑问可以随时私信我,我看到了就会回复,毕竟学习也是相互的,加油。
以下是源码----------------------------------
<template><div><!-- <el-dialog title="上传附件" :visible.sync="dialogFormVisible" width="50%" append-to-body="true"> --><el-uploadref="upload"class="upload-demo":action="action":before-remove="beforeRemove"multiple:on-preview="handlePreview":file-list="fileList":on-success="handleSuccess":before-upload="beforeUpload"accept="image/*,.pdf,.docx,.xlsx,.doc,.xls":on-remove="handleRemove":limit="6":on-exceed="handleExceed"><el-button size="small" type="primary">选取附件</el-button></el-upload><!-- 查看 --><div v-if="currentFile"><div v-if="currentFileType === 'excel'" class="officeShow"><vue-office-excel :src="fileSrc" style="height: 40vh;width: 100%;" /></div><div v-else-if="currentFileType === 'pdf'" class="officeShow"><vue-office-pdf :src="fileSrc" style="height: auto;width: 100%;" /></div><div v-else-if="currentFileType === 'word'" class="officeShow"><vue-office-docx :src="fileSrc" style="height: 40vh;width: 100%;overflow: scroll;" /></div><div v-else class="officeShow"><img :src="fileSrc" style="height: auto;width: 100%;"></div></div><!-- <div slot="footer" class="dialog-footer"><el-button @click="cancellation">取 消</el-button><el-button type="primary" @click="save">保 存</el-button><el-button type="primary" @click="upClick">上传</el-button></div> --><!-- </el-dialog> --></div>
</template><script>
// 引入VueOfficePdf组件
import VueOfficePdf from '@vue-office/pdf'
// docx
import VueOfficeDocx from '@vue-office/docx'
import '@vue-office/docx/lib/index.css'
// 引入VueOfficeExcel组件
import VueOfficeExcel from '@vue-office/excel'
// 引入相关样式
import '@vue-office/excel/lib/index.css'export default {components: {VueOfficeExcel,VueOfficePdf,VueOfficeDocx},props: {projectId: {type: String,default: ''}},data() {return {dialogFormVisible: false,action: process.env.VUE_APP_BASE_API + '/file/upload',fileList: [],currentFile: null,files: []}},computed: {currentFileType() {let type = ''if (this.currentFile.name) {const arr = this.currentFile.name && this.currentFile.name.split('.')type = arr[arr.length - 1]}switch (true) {case ['xls', 'xlsx'].includes(type):return 'excel'case ['doc', 'docx'].includes(type):return 'word'case ['pdf'].includes(type):return 'pdf'default:return 'img'}},fileSrc() {if (this.currentFileType === 'img') {const windowURL = window.URL || window.webkitURLconst src = windowURL.createObjectURL(this.currentFile.raw)return src} else {return this.currentFile.raw}}},methods: {show() {this.dialogFormVisible = true},cancellation() {this.dialogFormVisible = falsethis.fileList = []},// 暂存// save() {// this.dialogFormVisible = false// this.$notify({// title: '成功',// message: '已保存',// type: 'success',// duration: 1000// })// },handleRemove(file, fileList) {this.fileList = fileList// 判断溢出的文件是否当前预览中的文件if (fileList.findIndex(item => item.uid === this.currentFile.uid) === -1) {this.currentFile = null}},handlePreview(file) {// console.log(file)this.currentFile = file},handleExceed(files, fileList) {this.$message.warning(`当前限制选择 6 个文件,本次选择了 ${files.length}个文件,共选择了 ${files.length + fileList.length}个文件`)},beforeRemove(file, fileList) {return this.$confirm(`确定移除 ${file.name} ?`)},handleSuccess(response, file, fileList) {console.log(response, file, fileList)this.files.push(response)},beforeUpload(file) {const isLt20M = file.size / 1024 / 1024 < 20if (!isLt20M) {this.$message.error('上传文件大小不能超过 20MB!')}return isLt20M}}
}
</script><style lang="scss" scoped></style>
.....后续马上更,我有其他事情需要去处理一下
相关文章:
element-ui附件上传及在线查看详细总结,后续赋源码
一、附件上传 1、在element-ui上面复制相应代码 a、accept"image/*,.pdf,.docx,.xlsx,.doc,.xls" 是规定上传文件的类型,若是不限制,可以直接将accept‘all即可; b、:action"action" 这个属性就是你的上传附件的地址&am…...
投标中excel表格常用功能梳理
投标中excel表格常用功能梳理: 1.投标报价调整报价的办法: 目的调整报价,把“红框”的报价增加30%,50% 增加30%的步骤: 步骤1:选择1.3 复制(ctrlc) 步骤2:选择性黏贴 …...
C++二叉搜树的实现(递归和非递归)
目录 1.什么是二叉搜索树 2.二叉搜索树的查找 3.二叉搜索树插入 4.二叉搜索树的删除 1.删除的节点只有左子树或者右子树 2.删除节点左右子树都有的情况 5.代码 1.什么是二叉搜索树 左节点的值小于根节点 右节点大于根节点 左右子树也满足上面两个条件 例:…...
蓝桥杯算法 一.
分析: 本题记录:m个数,异或运算和为0,则相加为偶数,后手获胜。 分析: 369*99<36500,369*100>36500。 注意:前缀和和后缀和问题...
如何学习自然语言处理之语言模型
自然语言处理(NLP)是一种人工智能技术,它使计算机能够理解和处理人类语言。而语言模型是NLP中的一个重要概念,主要是用来估测一些词的序列的概率,即预测p(w1, w2, w3 … wn),其中一个应用就是句子的生成。 …...
Zoho ToDo 满足您的需求:任务管理满足隐私和安全要求
任务管理工具已经成为我们日常生活中不可或缺的一部分,它们帮助我们处理各种事务,从杂项和愿望清单到管理截止日期和资源。这些工具不仅仅是简单的任务列表,它们掌握了项目的蓝图、雄心勃勃的目标和完成的最后期限。然而随着这些工具的使用越…...
仿牛客网项目---社区首页的开发实现
从今天开始我们来写一个新项目,这个项目是一个完整的校园论坛的项目。主要功能模块:用户登录注册,帖子发布和热帖排行,点赞关注,发送私信,消息通知,社区搜索等。这篇文章我们先试着写一下用户的…...
虚拟机部署Sentry步骤,国内地址
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...
[Android View] 可绘制形状 (Shape Xml)
一切以官方文档为主 官方文档https://developer.android.com/guide/topics/resources/drawable-resource?hlzh-cn#Shape 什么是可绘制形状 可以理解为用xml文件来描述一个简单的Drawable图形,比如说以下这段xml就可以用来描述一个白色的圆形: <?…...
[游戏开发][虚幻5]新建项目注意事项
鼠标右键点击Client.uproject文件,可以看到三个比较关键的选项, 启动游戏,生成sln解决方案,切换引擎版本 断点调试 C代码重要步骤 如果你想断点调试C代码,则必须使用使用代码编译启动引擎,你需要做几个操作…...
防考试作弊切屏
防考试作弊切屏 方法一:监听页面失焦聚焦事件:防止任何操作 监听考试页面失焦事件记录切出时间页面聚焦时累积记录切入时间,累积时间大于1分钟自动交卷并移除时间页面销毁移出事件***bug:必须把事件回调定义为方法,在…...
浅析能耗监测系统在大型数据中心的应用
彭姝麟 Acrelpsl 1总体设计 大型数据中心能耗监测系统包含硬件和软件两大部分,其硬件组成主要包括监控服务器、主机设备、网络设备、环境参数传感器、通风模块等,总体采集逻辑采用三级监控体系。一级为主机设备,作为系统的应用层,…...
robotframework-去除字符串左侧的0的方法
参考文章:https://www.cnblogs.com/xiaodouzhou-123/p/10333759.html...
【Linux C | 网络编程】getaddrinfo 函数详解及C语言例子
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
深度学习主流开源框架:Caffe、TensorFlow、Pytorch、Theano、Keras、MXNet、Chainer
2.6 深度学习主流开源框架 表2.1 深度学习主流框架参数对比 框架关键词总结 框架关键词基本数据结构(都是高维数组)Caffe“在工业中应用较为广泛”,“编译安装麻烦一点”BlobTensorFlow“安装简单pip”TensorPytorch“定位:快…...
[Linux] vim及gdb的使用
Linux工具使用 Vim编辑器使用Vim的基本概念vim的基本操作vim正常模式命令集vim底行模式命令集 gdb调试器使用背景使用 Vim编辑器使用 Vim的基本概念 vim我们所需要掌握的有三种模式,分别是命令模式、插入模式、底行模式。 正常/普通/命令模式 控制屏幕光标移动&a…...
Android WebView访问网页+自动播放视频+自动全屏+切换横屏
一、引言 近期,我发现电视家、火星直播等在线看电视直播的软件都已倒闭,而我奶奶也再无法通过这些平台看电视了。她已六十多岁,快七十岁啦。这些平台的倒下对我来说其实没有多大的影响,但是对于文化不多的她而言,生活中…...
php PhpSpreadsheet 读取日期变数字问题解决
问题描述: 使用PhpSpreadsheet 读取表格数据,日期格式读取后变成数字,如下图: 解决方案: $cell $sheet->getCell(H . $row)->getValue(); $toTimestamp \PhpOffice\PhpSpreadsheet\Shared\Date::excelToTimes…...
前端架构: 脚手架包管理工具之lerna的全流程开发教程
Lerna 1 )文档 Lerna 文档 https://www.npmjs.com/package/lernahttps://lerna.js.org [请直达这个链接] 使用 Lerna 帮助我们做包管理,并不复杂,中间常用的命令并不是很多这里是命令直达:https://lerna.js.org/docs/api-referen…...
[安洵杯 2019]easy_serialize_php1
打开题目 题目源码: <?php$function $_GET[f];function filter($img){$filter_arr array(php,flag,php5,php4,fl1g);$filter /.implode(|,$filter_arr)./i;return preg_replace($filter,,$img); }if($_SESSION){unset($_SESSION); }$_SESSION["user&q…...
超级结MOSFET栅极驱动回路PCB优化指南
Q1:栅极驱动回路对超级结 MOSFET 性能有哪些决定性影响?栅极驱动回路是控制 SJ-MOSFET 开通、关断的核心路径,直接决定器件开关速度、振荡抑制、抗干扰能力、可靠性四大核心性能。SJ-MOSFET 栅极具有高输入阻抗(10⁹Ω 级…...
避坑指南:Spark On Hive配置中那些容易踩的雷(基于Spark 3.5.7 + Hive + MySQL 8)
Spark与Hive集成实战:避坑指南与深度优化 当Spark遇上Hive,数据处理的威力倍增,但集成过程中的配置陷阱也让人防不胜防。本文将聚焦Spark 3.5.7与Hive Metastore的深度集成,特别是与MySQL 8的兼容性问题,为已经完成基础…...
告别Office依赖!用Qt和QXlsx 1.4.3独立读写Excel的保姆级教程
告别Office依赖!用Qt和QXlsx 1.4.3独立读写Excel的保姆级教程 在跨平台应用开发中,处理Excel文件一直是个令人头疼的问题。传统方案依赖Office或WPS组件,不仅增加部署复杂度,在Linux服务器、嵌入式设备等环境中更是难以实现。本文…...
别再纠结选哪种了!立体视觉、结构光、TOF深度相机,看完这篇保姆级对比就知道你的项目该用谁
深度相机技术选型实战指南:立体视觉、结构光与TOF的黄金分割点 当你的机器人项目需要一双"慧眼"来感知三维世界时,摆在面前的技术选项往往令人眼花缭乱。市面上主流的深度感知方案——立体视觉、结构光和TOF,就像三种不同性格的助手…...
Adobe-GenP 3.0终极指南:一键快速激活Adobe CC全系列软件的完整教程
Adobe-GenP 3.0终极指南:一键快速激活Adobe CC全系列软件的完整教程 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你知道吗?对于创意工作者…...
Visual C++运行库终极修复指南:5分钟解决Windows软件运行错误
Visual C运行库终极修复指南:5分钟解决Windows软件运行错误 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过软件无法启动࿰…...
Legacy iOS Kit:旧设备系统降级与越狱的终极技术方案
Legacy iOS Kit:旧设备系统降级与越狱的终极技术方案 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 当…...
C++11列表初始化:告别混乱的终极方案
好的,我们来详细探讨 C11 中引入的列表初始化({})特性,理解它为何被称为解决初始化混乱问题的“最后一片净土”。问题背景:传统初始化方式的混乱在 C11 之前,C 提供了多种初始化方式,但各有局限…...
STM32低功耗模式实战:为什么你的WFI指令总是不休眠?手把手教你排查SysTick中断
STM32低功耗模式实战:为什么你的WFI指令总是不休眠?手把手教你排查SysTick中断 第一次在STM32上实现低功耗功能时,我盯着毫安表上纹丝不动的电流读数,反复检查代码却找不到问题所在。直到深夜调试时,偶然发现调试器中断…...
Laratrust检查器架构解析:深入理解权限验证机制
Laratrust检查器架构解析:深入理解权限验证机制 【免费下载链接】laratrust Handle roles and permissions in your Laravel application 项目地址: https://gitcode.com/gh_mirrors/la/laratrust Laratrust是Laravel应用中处理角色和权限的强大工具…...
