ZUploader 之 文件上传

news2024/11/17 2:32:10

文件上传是前端开发很常用的一个功能, 通常文件上传都是异于表单提交, 使用起来配置繁多, 校验不统一, 展示不统一。

效果对比

特点

  1. 简化使用
  2. 数据双向绑定
  3. 样式统一
  4. 带预览和下载功能

依赖

  1. 封装的组件 FileViewDialog (文件预览与下载,不需要此功能的话,可删除)

  2. 文件返回接口如果加密了, 则需要解密, 安装依赖 npm install crypto-js -S, 修改 上传成功回调

    // 上传成功回调
     handleUploadSuccess(res, file) {
       res = JSON.parse(Decrypt(res)) // 需要解密的话, 此处解密 !!!
     }

  3. 在 ZUploader/const.js 常量文件中,

    1. 引入项目公共的加解密方法 Decript 和 Encrypt
    2. 引入项目公共的获取 token方法, 请求头所需要的 AuthorizeToken ( 必填 )
    3. 定义 上传的服务器地址 uploadUrl ( 必填 )

 使用

1. 将下方 ZUploader 压缩包解压放到 /src/components 目录下

import ZUploader from '@/components/ZUploader'
Vue.component('ZUploader', ZUploader)

2. 使用

<ZUploader v-model="fileList"></ZUploader>

❤️ 组件接收的 属性有

props: {
   // 绑定的值, 可以是文件地址拼接的字符串, 可以是数组
    value: [String, Array],
    // 表示上传组件的类型, 可以是 image 和 file , 默认 image
    type: { type: String, default: 'image'},
    // 文件对象里 name 的 key
    nameKey: { type: String, default: 'name' },
    // 文件对象里的 url 的 key
    urlKey: { type: String, default: 'url' },
    // 图片数量限制 默认 5 个
    limit: { type: Number, default: 5 },
    // 大小限制(MB)
    fileSize: { type: Number, default: 10 },
    // 文件类型, 例如['png', 'jpg', 'jpeg']
    fileTypes: { type: Array },
    // 是否显示提示 默认开启
    isShowTip: { type: Boolean, default: true },
    // 提示信息的内容重写
    tipContent: { type: String, default: '' },
    // 控制tip是否为行内式, 在上传按钮右边
    isTipRight: { type: Boolean, default: false },
    // 是否禁用
    disabled: { type: Boolean },
    // 设置picture-card 宽高 默认 100px
    width: { type: String, default: '100px' },

    // 按钮内容
    btnText: { type: String, default: '点击上传' },
    // 上传的文件字段名
    fileKey: { type: String, default: 'file' },
    // 是否开启拖拽
    drag: { type: Boolean, default: false },
    // 是否开启自定义模板
    isCustomTemp: { type: Boolean, default: false },
},

❤️ ❤️ props 属性值 特别说明

  • value 有 三种 有效值
格式一: 'url1,url2,url3'
格式二: ['url1','url2','url3']
格式三: [{name:'name1',url:'url1'},{name:'name2',url:'url2'},{name:'name3',url:'url3'}]
  • type 可选值有 image 和 file

  • fileTypes 文件选择弹框过滤的文件类型集合 
为 `image`时,`fileTypes`默认值 ['png','jpg','jpeg']
为 `file`时,`fileTypes` 默认值 ['doc','docx','xls','xlsx','ppt','txt','pdf','png','jpg','jpeg','rar','zip']

 

  • isShowTip 是否显示提示 (当上传被 disabled 禁用时, 提示不显示)

  • tipContent 自定义提示信息, 可以是字符串模板 会被解析

  • isTipRight 控制 tip 是否为行内式, 在上传按钮右边

  • disabled 禁用上传, 只可查看文件

  • width 针对 type 为 image 是后, 调整图片大小

  • drag 是否开启拖拽

  •  isCustomTemp 是否开启自定义模板
    // 此时需要 type 为 file 类型, 通过作用域插槽, 将文件列表传递出来, 可以写自定义的展示模板
    
    <ZUploader v-model="fileList" @change="fileChange" type="file" isCustomTemp>
      <div slot-scope="{ data }" style="display: flex">
        <div style="color: red" @click="checkFile(data)">{{ data.name }}</div>
        <i class="el-icon-close" @click="removeItem(data.url)"></i>
      </div>
    </ZUploader>
    export default {
      data() {
        return {
          fileList: [
            {
              name: 'logo111.png',
              url: 'https://www.yjgygl.com/group1/default/20230417/08/45/4/7bc28997bf27751067e44867f113aeeb.png',
            },
          ],
        }
      },
      methods: {
        // 文件改变的回调
        fileChange(val) {
          console.log('fileChange: ', JSON.stringify(val))
        },
        // 预览
        checkFile(item) {
          this.$refs.uploadRef.handleFilePreview(item)
        },
        // 移除某一项
        removeItem(url) {
          const ind = this.fileList.findIndex((i) => i.url === url)
          this.fileList.splice(ind, 1)
        },
      },
    }

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

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

相关文章

用户体验分享 | YashanDB V23.2.3安装部署

近期崖山新版体验过程中&#xff0c;总能看到用户提问&#xff1a;openssl版本问题、monit命令找不到问题、yashan用户权限问题、数据库重装问题 今日整理了多位用户的安装经验&#xff0c;希望能够帮助到大家~ 1.Lucifer三思而后行 &#xff1a;YashanDB 个人版数据库安装部…

稳居赛道销量前三的制造业巨头:数据安全建设的高效实践

作为一家迅速扩展的全球化制造企业&#xff0c;我们的分支和业务遍布国内多个城市及海外&#xff0c;员工流动频繁&#xff0c;终端设备多样&#xff0c;研发流程复杂。因此&#xff0c;我们需要一个灵活且强大的数据安全策略。经过深入的市场调研和严格POC测试&#xff0c;我们…

使用Postman搞定各种接口token实战

现在许多项目都使用jwt来实现用户登录和数据权限&#xff0c;校验过用户的用户名和密码后&#xff0c;会向用户响应一段经过加密的token&#xff0c;在这段token中可能储存了数据权限等&#xff0c;在后期的访问中&#xff0c;需要携带这段token&#xff0c;后台解析这段token才…

虚拟机的安装和使用

一、虚拟机的简单介绍 虚拟机可以使你在一台机器上同时运行二个或更多Windows、LINUX等系统&#xff0c;它可以模拟一个标准PC环境。这个环境和真实的计算机一样&#xff0c;都有芯片组、CPU、内存、显卡、声卡、网卡、软驱、硬盘、光驱、串口、并口、USB控制器等。 二、虚拟机…

案例|高动态厘米级监测!广东这些长大桥有了北斗“守护者”

随着桥梁交通流量快速提升&#xff0c;加上受到恶劣使用环境、荷载作用、年限过长等因素影响&#xff0c;近年来&#xff0c;因桥梁损害引发的安全事故时有发生。伴随着传感设备、数字通讯网络、数据分析方法等新技术和新设备的发展&#xff0c;为桥梁管养提供了更多有效的检测…

09_行级锁的加锁流程

MySQL 的加锁流程 文章目录 MySQL 的加锁流程简介记录锁、间隙锁和临键锁概述行级锁加锁流程示例流程两个原则&#xff0c;两个优化&#xff0c;一个 BUG两个原则两个优化一个 BUG示例1-主键&#xff08;唯一&#xff09;索引示例 2-普通索引 总结 简介 在 MySQL InnoDB 存储引…

理解C语言之深入理解指针(三)

目录 1. 字符指针变量 2. 数组指针变量 2.1 数组指针变量是什么&#xff1f; 2.2 数组指针变量怎么初始化 3. ⼆维数组传参的本质 4. 函数指针变量 4.1 函数指针变量的创建 4.2 函数指针变量的使⽤ 4.3 两段有趣的代码 4.3.1 typedef 关键字 5. 函数指针数组 6. 转移…

Linux递归找出目录下最近被修改文件(最近一段时间内被修改过的最新文件)(最近修改文件、最新文件、查找文件)(监控目录、监控mysql文件)

文章目录 命令1&#xff1a;找出目录下最近60分钟内修改的最新文件命令解析&#xff1a; 命令2&#xff1a;找出目录下最近60分钟内修改的最新n个文件 命令1&#xff1a;找出目录下最近60分钟内修改的最新文件 find /ky_data/mysql -type f -mmin -60 -exec ls -ltr {} | tai…

【LeetCode每日一题】——LCP 51.烹饪料理

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 回溯 二【题目难度】 简单 三【题目编号】 LCP 51.烹饪料理 四【题目描述】 欢迎各位勇者来…

【工具分享】NoWay勒索病毒解密工具

前言 NoWay勒索软件首次出现在2023年&#xff0c;并迅速引起了网络安全领域的关注。它是一种典型的加密勒索软件&#xff0c;主要通过恶意电子邮件附件或不安全的下载链接传播。一旦成功感染系统&#xff0c;NoWay会加密受害者的文件&#xff0c;并要求支付赎金以恢复文件访问…

Redis(初步认识和安装)

初识Redis 认识NoSQLSQL结构化&#xff1a;structure关联的&#xff1a;RelationalSQL查询ACID NoSQL非结构化无关联的非SQLBASE 认识Redis安装Redis 认识NoSQL SQL和NoSQL比较 SQL 结构化&#xff1a;structure 数据库中表的字段都有固定的结构 关联的&#xff1a;Relati…

【c语言数据结构】栈的详解! 超级详细!(模拟实现,OJ练习题)

栈的概念&#xff1a; 栈&#xff1a;像是一种容器&#xff0c;东西只能从一个地方进&#xff0c;一个地方出&#xff0c;且后进先出&#xff01;这是其和队列&#xff08;先进先出&#xff0c;像排队一样&#xff0c;先到先得&#xff09;的本质区别 ⼀种特殊的线性表&#…

“JY901传感器“学习笔记

目录 一、产品概述 二、产品功能介绍 2.1、轴向说明 2.2、模块校准 2.3、姿态角 2.4、大地坐标系、地心地固坐标系、站心坐标系 三、参考文献 一、产品概述 模块集成高精度的陀螺仪、加速度计、地磁场传感器&#xff0c;采用高性能的微处理器和先进的动力解算与卡尔曼动…

两种不同方式实现交换机路由器的登录Console+Telnet的实现

一、背景及原理 1.Telnet 作为一种远程登录协议,1969年发明诞生于美国国防部高级研究计划局网络工作小组的研究员,Tenlet的出现为后续相关技术的发展奠定了基础。 2.Telnet通常用于远程登录应用中,对本地和远端进行网络设备配置、监控、维护,可以通过Telnet方式在一台设备…

博睿数据受邀亮相NebulaGraph Meetup北京站

9 月 21 日&#xff0c;北京站 nMeetup 如期而至&#xff0c;一场以 GraphRAG 和人工智能技术融合为主题的开发者聚会&#xff0c;在金秋的首都拉开帷幕。8 位讲师和 140 多位来自五湖四海的行业伙伴们相聚一堂&#xff0c;共同探讨 GraphRAG & AI 的最新发展和应用实践&am…

卷轴模式:一种新型的电子商务营销策略

随着电子商务行业的蓬勃发展&#xff0c;各类创新营销策略层出不穷&#xff0c;旨在吸引更多消费者并提升销售额。在这之中&#xff0c;卷轴模式以其独特的优势和可观的收益逐渐受到业界renxb001的关注。本文将深入探讨卷轴模式的概念、优势、应用场景以及如何参与其中。 卷轴…

关联式容器——map与set

map与set map与set的使用序列式容器与关联式容器概念序列式容器 (Sequence Containers)常见的序列式容器&#xff1a; 关联式容器 (Associative Containers)常见的关联式容器&#xff1a; set的定义与使用set类的介绍set的构造和迭代器set的增删查&#xff08;无改&#xff09;…

Ego微商小程序项目实战4.0【环境搭建】

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

自动化测试框架集成:将Selenium集成到pytest与unittest中

目录 引言 一、Selenium简介 二、Selenium与pytest的集成 1. 安装pytest和Selenium 2. 编写测试用例 3. 运行测试 三、Selenium与unittest的集成 1. 编写测试类 2. 运行测试 四、Selenium自动化测试的最佳实践 1. 使用Page Object模式 2. 合理利用等待机制 3. 跨浏…

vioovi视与视标准工时工具与ECRS工时分析软件:精益生产的新纪元

在当今快速变化的市场环境中&#xff0c;企业面临着前所未有的挑战&#xff0c;其中成本控制与效率提升成为制约其发展的关键因素。传统的标准工时工具在应对这些挑战时显得力不从心&#xff0c;其局限性日益凸显。而vioovi视与视标准工时工具的出现&#xff0c;则为企业实现精…