Element UI上传图片和PDF,支持预览,并支持复制黏贴上传

 

 背景


  如上图,使用Element UI的el-upload组件,并且预览的时候可以展示图片和PDF格式文件;


 做法

  index.vue

<template><div><el-uploadv-model="diaForm.list":limit="5":on-exceed="handleExceed":on-preview="handlePreview":before-upload="beforeAvatarUpload":on-remove="handleRemove":headers="reqHeaders":on-success="onUploadSuccess":action="uploadUrl()":file-list="resultFileList"list-type="picture"class="upload-files"accept=".png,.jpeg,.gif,.pdf,.jpg,.JPG"><div class="upfile-btn"><d2-icon name="document-upload" class="document-upload" /><div>点击上传+拖拽上传</div></div></el-upload></div>
</template><script>
import { workOrderUploadUlr } from '@/api/upload';
export default {data() {return {diaForm: {desc: '',list: [],},resultFileList: [],};},methods: {// 限制上传个数不超过5个handleExceed(files, fileList) {if (fileList && fileList.length == 5) {this.$message.warning('XXXX');}},handlePreview(file) {console.log(file);},// 限制不超过30MbeforeAvatarUpload(file) {const isLt5M = file.size / 1024 / 1024 < 30;if (!isLt5M) {this.$message.error('XXXX');}return isLt5M;},// 移除文件handleRemove(file, fileList) {if (!file) {return;}const index = this.resultFileList.findIndex(item => item.uid === file.uid);this.resultFileList.splice(index, 1);},// 设置请求头里面的token 和 userIdreqHeaders() {return {token: this.$util.cookies.token,userId: this.info ? this.info.userId : '',};},// 上传成功,返回onUploadSuccess(response, file, fileList) {if (response && response.code === 'APPLY_SUCCESS') {if (response.data) {this.resultFileList.push({url: response.data.url,name: response.data.name,uid: file.uid});this.dealPDF();setTimeout(() => {this.dealPDF();}, 1);}} else if (response && response.msg) { console.log('upload failed', response.msg); }},// 上传的服务器的地址uploadUrl() {return workOrderUploadUlr();},dealPDF() {var liElements = document.querySelectorAll('ul.el-upload-list.el-upload-list--picture li.el-upload-list__item');liElements.forEach(function(liElement) {var aElement = liElement.querySelector('a.el-upload-list__item-name');if (aElement && aElement.textContent.includes('.pdf')) {var imgElement = liElement.querySelector('img.el-upload-list__item-thumbnail');if (imgElement) {imgElement.src = 'https://sg-pay69e4d75928dac6fddd3229a/file.png'; // 替换为你想要的新图片的URL}}});},}
};
</script><style></style>

upload.js

// import request from '@/plugin/axios';
const host = require('../../host');
// 工单文件上传
export function workOrderUploadUlr(hostType = 'BASIC_GATE') {return host.getBaseUrl(hostType) + 'xxxxx/file/upload';
}

再次基础上,我们对上面代码进行改造,添加监听past事件

<template><div><el-uploadv-model="diaForm.list":limit="5":on-exceed="handleExceed":on-preview="handlePreview":before-upload="beforeAvatarUpload":on-remove="handleRemove":headers="reqHeaders":on-success="onUploadSuccess":action="uploadUrl()":file-list="resultFileList"list-type="picture"class="upload-files"accept=".png,.jpeg,.gif,.pdf,.jpg,.JPG"><div class="upfile-btn"><d2-icon name="document-upload" class="document-upload" /><div>点击上传+拖拽上传 + 复制黏贴 + 截图上传</div></div></el-upload></div>
</template><script>
import { workOrderUploadUlr } from '@/api/upload';
import { evaluateUpload } from '@/api/auth';
export default {data() {return {diaForm: {desc: '',list: [],},resultFileList: [],};},mounted() {document.addEventListener('paste', this.handlePaste);},beforeDestroy() {document.removeEventListener('paste', this.handlePaste);},methods: {async handlePaste(event) {const clipboardData = event.clipboardData || window.clipboardData;if (clipboardData) {const items = clipboardData.items;if (items && items.length > 0) {for (let i = 0; i < items.length; i++) {const item = items[i];if (item.kind === 'file' && item.type.startsWith('image/')) {const file = item.getAsFile();const formData = new FormData();formData.append('file', file);if (file) {evaluateUpload(formData, {token: this.$util.cookies.token,userId: this.info ? this.info.userId : '',}).then((response) => {const { data, code } = response.data || {};// 上传成功,应该返回if (code === 'APPLY_SUCCESS') {if (data) {this.resultFileList.push({url: data.url,name: data.name,uid: file.uid});}console.log(this.resultFileList, '剪贴成功数据');} else if (response && response.msg) { console.log('upload failed', response.msg); }}).catch((error) => {console.log(error);});}}}}}},// 限制上传个数不超过5个handleExceed(files, fileList) {if (fileList && fileList.length == 5) {this.$message.warning('XXXX');}},handlePreview(file) {console.log(file);},// 限制不超过30MbeforeAvatarUpload(file) {const isLt5M = file.size / 1024 / 1024 < 30;if (!isLt5M) {this.$message.error('XXXX');}return isLt5M;},// 移除文件handleRemove(file, fileList) {if (!file) {return;}const index = this.resultFileList.findIndex(item => item.uid === file.uid);this.resultFileList.splice(index, 1);},// 设置请求头里面的token 和 userIdreqHeaders() {return {token: this.$util.cookies.token,userId: this.info ? this.info.userId : '',};},// 上传成功,返回onUploadSuccess(response, file, fileList) {if (response && response.code === 'APPLY_SUCCESS') {if (response.data) {this.resultFileList.push({url: response.data.url,name: response.data.name,uid: file.uid});this.dealPDF();setTimeout(() => {this.dealPDF();}, 1);}} else if (response && response.msg) { console.log('upload failed', response.msg); }},// 上传的服务器的地址uploadUrl() {return workOrderUploadUlr();},dealPDF() {var liElements = document.querySelectorAll('ul.el-upload-list.el-upload-list--picture li.el-upload-list__item');liElements.forEach(function(liElement) {var aElement = liElement.querySelector('a.el-upload-list__item-name');if (aElement && aElement.textContent.includes('.pdf')) {var imgElement = liElement.querySelector('img.el-upload-list__item-thumbnail');if (imgElement) {imgElement.src = 'https://sg-pay69e4d75928dac6fddd3229a/file.png'; // 替换为你想要的新图片的URL}}});},}
};
</script><style></style>

auth.js

import request from '@/plugin/axios';
import {post,
} from '@/plugin/axios/helper.js';
import md5 from 'md5';// 登录新
export function evaluateUpload(data = {}, token) {return request({url: '/file/workOrder/upload',method: 'post',useError: true,data: data,headers: { 'Content-Type': 'multipart/form-data', ...token },hostType: 'BASIC_GATE',});
}

这里主要需要再header中设置 'Content-Type': 'multipart/form-data' 还有依赖的Token等字段内容。

效果展示

随便屏幕截图

然后 黏贴

发现图片已经上传到组件中了

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

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

相关文章

微信小程序毕业设计-综合文化信息管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

算法课程笔记——蓝桥第17次直播云课

算法课程笔记——蓝桥第17次直播云课 递归 改成signed&#xff0c;把所有int 改成longlong 100会越界

使用Ollama+OpenWebUI本地部署Gemma谷歌AI开放大模型完整指南

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;AI大模型部署与应用专栏&#xff1a;点击&#xff01; &#x1f916;Ollama部署LLM专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月4日10点50分 &#x1f004;️文章质量&#xff1…

Vue-App桌面程序列表

Vue-App桌面程序列表 文章说明讲解视频核心代码效果展示项目链接 文章说明 采用Vue实现PC端的桌面程序列表&#xff0c;采用HBuilderX将程序转化为5App&#xff0c;实现移动端的适配&#xff1b;支持桌面打开新应用&#xff0c;底部导航展示当前应用列表&#xff0c;可切换或关…

php质量工具系列之PHPCPD

PHPCPD 用于检测重复代码&#xff0c;直观的说就是复制粘贴再稍微改改 该工具作者已经 停止维护 安装 composer global require --dev sebastian/phpcpd执行 phpcpd --log-pmd phpcpd_result.xml ./app参数介绍 --log-pmd 将结果保存在phpcpd_result.xml 中 ./app 是phpcpd扫…

Linux系统之部署Blog-Index导航页

Linux系统之部署Blog-Index导航页 一、Blog-Index介绍1.1 Blog-Index简介1.2 Blog-Index特点1.3 Blog-Index使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 Yarn介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装yarn 四…

VS-qt中运行程序时报错:fatal error RC1015:cannot open include file ‘afxres.h‘

开发环境&#xff1a;VS2015 qt5.12.10 点击运行时报错如下&#xff1a; 搜索了下afxres.h文件&#xff0c;发现位置如下&#xff1a; 看样子是VS中少安装了部分模块导致的&#xff0c;&#xff0c;看了同事的电脑&#xff0c;该文件应该是在以下目录中的&#xff1a; 所…

如何在Python中向Word文档添加段落

如何在Python中向Word文档添加段落 添加段落代码解析添加前与添加后 在这篇博客文章中&#xff0c;我们使用Python向Word文档添加段落。 添加段落 from docx import Document# 打开一个现有的Word文档 doc Document(rC:\Users\Administrator\Desktop\Word文档\example.docx)…

生成式人工智能如何运作?

一、简述 生成式人工智能是一种可用于创建内容&#xff08;包括对话、故事、图像、视频和音乐&#xff09;的人工智能。人工智能技术试图在图像识别、自然语言处理&#xff08;NLP&#xff09;和翻译等非传统计算任务中模仿人类智能。生成式人工智能是人工智能的发展方向。您可…

Ubuntu22.04下源码编译安装pythonocc-7.8

Ubuntu22.04下源码编译安装pythonocc-7.8 本文介绍Ubuntu下手动编译安装pythonocc&#xff0c;及安装过程遇到的各种坑 基本依赖安装 sudo apt-get update sudo apt-get install -y wget libglu1-mesa-dev libgl1-mesa-dev libxmu-dev libxi-dev build-essential cmake libf…

如何提高网站收录?

GSI服务就是专门干这个的&#xff0c;这个服务用的是光算科技自己研发的GPC爬虫池系统。这个系统通过建立一个庞大的站群和复杂的链接结构&#xff0c;来吸引谷歌的爬虫。这样一来&#xff0c;你的网站就能更频繁地被谷歌的爬虫访问&#xff0c;从而提高被收录的机会。 说到效…

【机器学习】【深度学习】优化器(Optimizer)

一、概述 什么是优化器&#xff1f; 优化器(Optimizer)是深度学习中的一个核心的概念&#xff0c;用于更新神经网络的权重&#xff0c;以减少或最小化损失函数(loss function)的值。损失函数衡量了模型的预测值与真实值之间的差异&#xff0c;而优化器的目标是通过调整网络参…

CPU内部结构窥探·「3」

加法器的工作原理&#xff1a;从简单的逻辑到现代计算 我们在cpu内部结构窥探「1」中提到CPU内部ALU的核心部件就是运算器&#xff0c;今天就以加法器为例&#xff0c;来讲解我们ALU中算数逻辑运算的过程。 1.认识数字电路中的各种门电路 2. 什么是加法器&#xff1f; 加法器…

Web UI自动化测试_Selenium+Python

一、概述&#xff1a; 1.1 Selenium是什么 Selenium 是一个基于浏览器的自动化工具&#xff0c;可以跨平台、跨浏览器使用。 Selenium 主要包括三部分&#xff1a; 1、Selenium IDE&#xff1a; Firefox 浏览器的一个插件&#xff08;扩展&#xff09;&#xff0c;它可以进行…

如何检测UV胶的均匀性?

如何检测UV胶的均匀性&#xff1f; 检测UV胶的均匀性可以通过以下几种方法来实现&#xff1a; 肉眼目视检查&#xff1a; 这是最简单直接的方法。将UV胶涂在表面上&#xff0c;使用裸眼观察胶层的表面。特别注意是否存在气泡、颜色不均匀、裂纹或其他明显的不均匀性。如凹凸不…

异步复位和同步释放

文章目录 前言一、为什么需要复位呢&#xff1f;二、同步复位1. 同步复位定义2. 同步复位的实现3. 同步复位的优点和缺点同步复位优点同步复位缺点 三、异步复位1. 异步复位定义2. 异步复位的实现3. 异步复位的优点和缺点异步复位优点异步复位缺点 四、异步复位同步释放1. reco…

Html/HTML5常用标签的学习

课程目标 项目实战&#xff0c;肯定就需要静态网页。朝着做项目方式去学习静态网页。 01、编写第一个html工程结构化 cssjsimages/imgindex.html 归档存储和结构清晰就可以。 02、HTML标签分类 认知&#xff1a;标签为什么要分类&#xff0c;原因因为&#xff1a;分门别类…

关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备(改进版)

主要最近做了一个要用STM32实现读取鼠标键盘一体的那种USB设备&#xff0c;STM32的界面上要和电脑一样的能通过这个USB接口实现鼠标移动&#xff0c;键盘的按键。然后我就很自然的去参考了正点原子的例程&#xff0c;可是找了一圈&#xff0c;发现正点原子好像用的库函数&#…

【计算机网络】对应用层协议中HTTPS协议的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

Oracle的优化器

sql优化第一步&#xff1a;搞懂Oracle中的SQL的执行过程 从图中我们可以看出SQL语句在Oracle中经历了以下的几个步骤&#xff1a; 语法检查&#xff1a;检查SQL拼写是否正确&#xff0c;如果不正确&#xff0c;Oracle会报语法错误。 语义检查&#xff1a;检查SQL中的访问对象…