element对上传组件二次封装,vue上传下载组件的实现

2023-11-16

前言:

      对element的上传组件进行二次封装,让他可以实现上传下载功能。

实现效果:

手动上传,不是自动,选中文件后可上传,也可清空选中文件,单个删除也是可以的

实现步骤:

1、封装好的 uploadAndDown.vue源码,  引入就好

<template>
      <el-upload
        v-if="Refresh"
        class="upload-demo"
        ref="upload"
        :action="action"
        :headers="headers"
        :multiple="multiple"
        :data="data"
        :name="name"
        :with-credentials="cookieOK"
        :show-file-list="showFileList"
        :drag="drag"
        :accept="accept"
        :list-type="listType"
        :auto-upload="autoUpload"
        :file-list="fileList"
        :disabled="is_disabled"

        :on-preview="handlePreview"
        :on-remove="handleRemove"
        :on-success="handleSuccess"
        :on-error="handleError"
        :on-progress="handleProgress"
        :on-exceed="handleExceed"
        :on-change="onChange"

        :before-upload="beforeUpload"
        :before-remove="beforeRemove"
        :http-request="httpRequest"
        >
        <el-button slot="trigger" type="primary" icon="el-icon-upload2">选取文件</el-button>
        <el-button style="margin-left: 10px;"
                   type="success"
                   @click="submitUploadSD"
                   :disabled="fileList.length==0"
                   :title="fileList.length==0?'请先选中文件':''"
                   icon="el-icon-upload">开始上传</el-button>
        <el-button type="danger"
                   v-if="fileList.length>0"
                   icon="el-icon-delete"
                   @click.stop="clearFiles"
                   title="清空选中文件"
                   circle></el-button>
        <el-button style="margin-left: 10px;"
                   type="primary"
                   @click.stop="downFile"
                   icon="el-icon-download">下载模板</el-button>

        <!--提示信息-->
        <div slot="tip" class="el-upload__tip" v-if="tip_text!=''">{{tip_text}}</div>
      </el-upload>

</template>

<script>
  //element的上传文件组件
  export default {
    props:{
      /**
       * 自动上传参数
       * */
      autoUpload:{ // 是否需要选取完自动上传功能
        type: Boolean,
        default: false
      },
      action:{//上传的地址
        type: String,
        default: ''
      },
      headers: {//设置上传的请求头部
        type:Object,
        default: () => {
          return {}
        }
      },
      data: {//上传时额外带的参数
        type:Object,
        default: () => {
          return {}
        }
      },
      name:{//上传的文件字段名
        type: String,
        default: 'file'
      },
      cookieOK:{//支持发送 cookie 凭证信息
        type: Boolean,
        default: true
      },
      /**
       * 公共参数
       * */
      showFileList:{//是否显示已上传文件列表
        type: Boolean,
        default: true
      },
      drag:{//是否启用拖拽上传
        type: Boolean,
        default: false
      },
      accept:{//接受文件类型-图片上传类型-不同的格式之间以逗号隔开
        type: String,
        // default:'.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document'
        default: '.xlsx,.xls'
      },
      listType:{ // 文件列表的类型 - text/picture/picture-card
        type: String,
        default: 'text'
      },
      fileList:{//已上传的文件列表,
        type:Array,
        default: () => {
          // { 默认格式
          //   name: 'food.jpeg',
          //   url: 'https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100'
          // }
          return []
        }
      },
      is_disabled:{//是否禁止,true是禁止,false不禁止
        type: Boolean,
        default: false
      },
      multiple:{//是否可以多选
        type: Boolean,
        default: true
      },
      limit:{//最大允许上传个数
        type: Number,
        default: 30
      },

      tip_text:{//提示信息
        type: String,
        default: ''
      },
      /**
       * 手动上传参数
       * */
      needFromUpload:{ // form表单,将上传的file文件通过 formUpload  方法发送出去
        type: Boolean,
        default: false
      },


    },
    watch: {},
    data() {
      return {
        Refresh:true,//强制刷新
      }
    },
    created() {
    },
    mounted() {
    },
    methods: {
      /**
       * 上传-默认事件
       * */
      //文件列表移除文件时的钩子
      handleRemove(file, fileList) {
        console.log('当前移除的是'+file);
      },
      //点击文件列表中已上传的文件时的钩子
      handlePreview(file) {
        console.log('当前点击的是'+file);
      },
      //文件上传成功时的钩子
      handleSuccess(response, file, fileList) {
        console.log('文件上传成功');
      },
      //文件上传失败时的钩子
      handleError(err, file, fileList) {
        console.log('文件上传失败');
      },
      //文件上传时的钩子
      handleProgress(event, file, fileList) {
        console.log(file);
      },
      //文件超出个数限制时的钩子
      handleExceed(files, fileList) {
        console.log('文件超出个数限制');
      },
      //覆盖默认的上传行为,可以自定义上传的实现
      httpRequest(){

      },
      //删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。
      beforeRemove(file, fileList) {
        console.log('当前删除的文件'+file);
        this.fileList.forEach((item,index)=>{
          if(item == file){
            this.fileList.splice(index,1)
          }
        })
      },

      /**
       * 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
       */
      onChange(file, fileList) {
        this.fileList = fileList;
        console.log('当前的选中文件:');
        console.log(fileList);
      },
      /**
       * 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。
       */
      beforeUpload(file) {
          console.log(file);
      },
      /**
       * 上传-自定义事件
       * */
      submitUpload() {
        this.$refs.upload.submit();
      },
      //清空已上传的文件列表(该方法不支持在 before-upload 中调用)
      clearFiles(){
        this.$refs.upload.clearFiles();
        this.fileList = [];
      },
      //取消上传某个文件
      abortFiles(file){
        this.$refs.upload.abort(file);
      },



      /**
       * 手动上传点击确认
       * */
      submitUploadSD(){
        let arr = this.fileList;
        let str = {
          fileList:arr
        }
        this.$emit('uploadFile',str);
      },
      /**
       * 下载模板点击
       * */
      downFile(){
        this.$emit('downFile');
      },
      /**
       * 手动刷新上传组件
       * */
      RefreshUpload(){
        let arr = this.fileList;
        this.Refresh = false;
        this.$nextTick(()=>{
          this.Refresh = true;
        })
      },

    },
    components: {},
    beforeDestroy() {
    }

  }
</script>

<style lang='scss' scoped>

</style>

2、调用方法:

template:

<uploadAndDown class="uploadAndDown" @uploadFile="uploadFile" @downFile="downFile"></uploadAndDown>

js部分: 这里拿到的是一个数组,不管增、删,这个数组都是对应现在选中了几个文件

      /**
       * 上传
       * */
      uploadFile(str){
        let fileList = str.fileList;
        debugger

      },
      //下载事件
      downFile(){
        console.log('点击下载按钮');
      },

css部分:

 .uploadAndDown{
    width: 91%;
    padding-right: 1%;
    float: right;
  }

相关api:

Attribute

参数 说明 类型 可选值 默认值
action 必选参数,上传的地址 string
headers 设置上传的请求头部 object
multiple 是否支持多选文件 boolean
data 上传时附带的额外参数 object
name 上传的文件字段名 string file
with-credentials 支持发送 cookie 凭证信息 boolean false
show-file-list 是否显示已上传文件列表 boolean true
drag 是否启用拖拽上传 boolean false
accept 接受上传的文件类型(thumbnail-mode 模式下此参数无效) string
on-preview 点击文件列表中已上传的文件时的钩子 function(file)
on-remove 文件列表移除文件时的钩子 function(file, fileList)
on-success 文件上传成功时的钩子 function(response, file, fileList)
on-error 文件上传失败时的钩子 function(err, file, fileList)
on-progress 文件上传时的钩子 function(event, file, fileList)
on-change 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用 function(file, fileList)
before-upload 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise 且被 reject,则停止上传。 function(file)
before-remove 删除文件之前的钩子,参数为上传的文件和文件列表,若返回 false 或者返回 Promise 且被 reject,则停止删除。 function(file, fileList)
list-type 文件列表的类型 string text/picture/picture-card text
auto-upload 是否在选取文件后立即进行上传 boolean true
file-list 上传的文件列表, 例如: [{name: 'food.jpg', url: 'https://xxx.cdn.com/xxx.jpg'}] array []
http-request 覆盖默认的上传行为,可以自定义上传的实现 function
disabled 是否禁用 boolean false
limit 最大允许上传个数 number
on-exceed 文件超出个数限制时的钩子 function(files, fileList) -

Slot

name 说明
trigger 触发文件选择框的内容
tip 提示说明文字

Methods

方法名 说明 参数
clearFiles 清空已上传的文件列表(该方法不支持在 before-upload 中调用)
abort 取消上传请求 ( file: fileList 中的 file 对象 )
submit 手动上传文件列表

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

element对上传组件二次封装,vue上传下载组件的实现 的相关文章

  • 对于 IE 给出完整路径,仅需要文件名

    当从 IE 浏览器执行上传时 我的后端 org apache commons fileupload 获取完整的文件路径 对于其他非 IE 浏览器 它会获取文件名 并且出于安全考虑 这是可以的 如何获得filename只能从 IE 输入吗 是
  • 将文件从 URL 上传到 Microsoft Azure Blob 存储

    从本地路径 从我的计算机 上传文件不是问题 但是 我没有找到如何从特定 URL 上传 如果可能的话 需要 Python 解决方案 仅本地文件有文档https learn microsoft com en us azure storage b
  • Stream_Copy_To_Stream() 的替代方案 php

    我现在正在开发一个文件共享网站 遇到了一个小问题 我正在使用上传脚本 uploadify 它工作得很好 但如果用户想要 我希望上传的文件被加密 现在我有可以执行此操作的工作代码 如下所示 但我的服务器只有 1GB 或内存 并且使用strea
  • CodeIgniter 上传大文件

    我已经设置了 codeigniter 来上传 function stage1 ini set upload max filesize 200M ini set post max size 200M ini set max input tim
  • 检测文件上传需要多长时间(PHP)

    是否可以知道 服务器端 文件上传所需的时间 我有一个图像上传 API 在我的响应中我想返回上传时间 不包括脚本执行时间 我想是的 有 SERVER REQUEST TIME 指示 HTTP 请求开始的变量 因此在脚本的一开始 upload
  • 使用 PHP 上传非常大的数据

    我想允许将非常大的文件上传到我们的 PHP 应用程序中 数百兆 8 GB 然而 这存在一些问题 Browser HTML 上传的反馈很糟糕 我们需要轮询进度 这有点傻 或者根本不显示任何反馈 Flash 上传程序在开始上传之前将整个文件放入
  • PHP 中的安全用户图像上传功能

    我正在为我的网站实现一个基于用户的图像上传工具 系统应允许任何用户仅上传 JPEG 和 PNG 文件 当然 我担心安全性 所以我想知道许多比我聪明的人对以下允许上传的检查有何感受 1 首先将 PHP 中允许的文件扩展名列入白名单 仅允许 P
  • 如何使 Flex 文件上传在 Firefox 和 safari 上正常工作?

    我有一个将文件上传到服务器的 Flex 应用程序 服务器需要身份验证才能上传 在 IE 中上传工作正常 但在 FF 和 Safari 中 它不上传 我见过很多人都有同样的问题 但没有答案 现在不要让我失望 stackoverflowers
  • 在上传到远程网站期间缩小/调整视频大小

    我有一个用 Ruby on Rails 编写的 Web 应用程序 它使用表单将视频从用户上传到服务器 我实际上使用直接上传到 s3 的 jquery 上传器 但我认为这不相关 为了减少视频的上传时间 我想缩小它的大小 例如如果视频大小为 1
  • iphone SDK:将图像从iphone上传到php服务器发送空文件?(内部示例代码链接)

    我尝试通过 PHP 将照片和 GPS 位置发送到服务器 这是 PHP 部分 从这里复制 http www w3schools com PHP php file upload asp保存上传的文件 上面的示例在服务器上的 PHP 临时文件夹中
  • 拖放文件上传

    因此 我正在努力寻找我正在寻找的东西以及如何实现它 我有一个基本的 PHP 文件上传器 用户按下自定义上传按钮 选择一个文件 然后使用 JS 检查更改 即用户选择文件 然后提交上传图像的表单美好的 我现在还想要一个拖放上传区域 因此 用户可
  • 使用 PHP 从 S3 获取视频并上传到 YouTube

    我有一些代码可以将视频文件上传到 YouTube yt new Zend Gdata YouTube httpClient create a new VideoEntry object myVideoEntry new Zend Gdata
  • 在 JQuery 中通过 AJAX 上传文件

    我是 JQuery AJAX 的新手 我想用jquery实现文件上传 是否可以使用 JQuery AJAX 进行文件上传并将其发送到 Servlet Servlet 可以使用 apache file commons 来上传文件 有人可以建议
  • 如何使用Delphi 2010优化上传例程?

    My 尚未发布Delphi 2010 应用程序允许用户将他们的文件上传到我的服务器 现在我使用 HTTPS POST 发送文件 简化的 算法基本上是 将文件拆分为 片 每个片 256KB 对于每个切片 将其 POST 到服务器 IE 对于
  • 如何使用 Curl 将文件从另一台服务器上传到另一台服务器?

    如何在 Shell 脚本和 PHP 中使用 Curl 将文件从另一台服务器上传到另一台服务器 我有一个 txt 文件存储在存储 Shell 脚本的服务器中 现在我希望将该 txt 文件上传到另一台服务器的特定文件夹中 2台服务器已经连接 t
  • 在 Rails 中使用回形针进行 ajax 上传的简单方法?

    我想知道是否有一个简单的方法 例如一个插件 用回形针在 Rails 中进行 ajax 上传 还是我必须从头开始构建它 Cheers 编辑 另外 我正在寻找非闪存解决方案 你可以试试remotipart http os alfajango c
  • PHP 一次只能看到 20 个上传文件

    当我尝试一次上传超过 20 个文件时 网络服务器只能看到前 20 个文件 任何其他文件都会被忽略 问题是什么 简单的代码可以尝试
  • html 文件上传的默认文件夹和文件名

    我正在使用 jQuery Ajax 插件将图像文件从本地计算机上传到网络服务器 该网页呈现一个标记为Upload Image File 用户按下按钮并从浏览器显示的弹出目录列表中选择要上传的文件 服务器上的 PHP 存储图像文件 一切正常
  • 上传进度条 Java Servlet?

    我想使用 servlet 显示上传进度条 我尝试过Ajax iFrame 技术 页面没有重新加载 文件也被上传 但是 进度条没有出现 有没有可用于 javaservlts 的 jQuery 进度插件 Thanks 我强烈推荐jQuery 上
  • PHP 文件上传帮助

    div align center div 这是我的代码

随机推荐

  • 60-200-072-使用-命令-MySQL使用mysqldumpslow分析慢查询日志文件

    1 概述 因为直接分析日志文件是个体力活 因此mysql为我们提供了相关工具mysqldumpslow来对慢查询日志文件进行分析 2 mysqldumpslow命令 访问次数最多的10条sql语句 usr local mysql bin m
  • fedora18 从文本模式启动而不是图形界面启动

    在之前的linux版本中 如果想要启动操作系统后直接进入文本模式 那就要修改 etc inittab这个文件 把其中的5改成3即可 可是 linux2 6 貌似是 内核之后 这个文件就改了 它不再控制着系统的默认启动模式了 如果在fedor
  • vant-weapp 组件 样式的覆盖(一)

    最近在小程序开发中使用到 vant weapp 组件 但有些样式不符合自己的项目要求 需要对样式进行覆盖 以DropdownMenu组件为例 需求是用户选择菜单项 菜单文字变成 橙色 样式的修改 就是以权重高的 覆盖权重低的
  • “Docker Content Trust + 镜像签名”,打造安全的 Kubernetes 供应链!

    出品丨Docker公司 ID docker cn 编译丨小东 每周一 三 五晚6点10分 与您不见不散 说在前面 两周前 我们分享了一篇名为 镜像扫描 基于策略的镜像提升 打造安全的 Kubernetes 供应链 的文章 它主要介绍了 Do
  • 利用BaseMultiItemQuickAdapter打造二、三级级菜单

    去网上找了下资料 然后自己整理了下二级 三级菜单的实现 直接上代码 Recyclerview记得要导包 implementation com android support recyclerview v7 28 0 0 一 首先在app下的
  • AI赋能的判定机制的倾向性

    最近忙着论文的事情 没有时间写一些技术博客 而且CSDN的图床经常出现问题 也懒得整理了 今天也是说些闲话 讨论下对未来AI赋能的判定机制的一些思考 什么是AI赋能的判定机制 主要其实就是 基于机器智能的技术手段 来代替人类评判事情 可以举
  • 最全的整理:毫米波雷达在检测、分割、深度估计等多个方向的近期工作及简要介绍

    前情回顾 在之前 我已经有介绍过毫米波雷达在2D视觉任务上的一些经典网络 自动驾驶中雷达与相机融合的目标检测工作 多模态目标检测 整理 Naca yu的文章 知乎 总结概括而言 其本质上都是对视觉任务的一种提升和辅助 主要的工作在于如何较好
  • 一些官方的github地址

    阿里巴巴开源github地址 https github com alibaba 腾讯开源github地址 https github com Tencent 奇虎360github地址 https github com Qihoo360 小米
  • xss的绕过方式

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 xss的类型以及常用标签 二 xss常用绕过 总结 前言 xss cross site scripting 中文 跨站脚本攻击 常年位于owasp top
  • 损失函数和正则化

    参考 https www cnblogs com LXP Never p 10918704 html https blog csdn net Heitao5200 article details 83030465 https zhuanla
  • C++-----拷贝构造函数

    拷贝构造函数是一种特殊的构造函数 和构造函数同样是特殊的类成员函数 C 提供的拷贝构造函数用于在建立新对象时将已存在对象的数据成员的值复制给新对象 拷贝函数的特点 拷贝函数是构造函数的一个重载形式 拷贝函数的参数只有一个且必须是类类型对象的
  • ffmpeg命令使用记录

    1 添加水印 ffmpeg i a mp4 acodec copy b v 548k vf movie logo png watermark in watermark overlay 20 20 output mp4 说明 i a mp4
  • TM4C123库函数学习(1)--- 点亮LED+TM4C123的ROM函数简介+keil开发环境搭建

    前言 1 首先 我们需要知道TM4C123是M4的内核 对于绝大多数人而言 入门都是学习STM32F103 这款芯片是采用的M3的内核 所以想必各位对M3内核还是有一定的了解 M4内核就是M3内核的升级版本 他继承了M3的的所有功能 同时还
  • leetcode 1604. 警告一小时内使用相同员工卡大于等于三次的人

    力扣公司的员工都使用员工卡来开办公室的门 每当一个员工使用一次他的员工卡 安保系统会记录下员工的名字和使用时间 如果一个员工在一小时时间内使用员工卡的次数大于等于三次 这个系统会自动发布一个 警告 给你字符串数组 keyName 和 key
  • C~运算符

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号 C 语言提供了以下类型的运算符 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 杂项运算符 算术运算符 下表显示了 C 语言支持的所有算术运算符 假设变量 A 的值为 10 变
  • Windows10安装Docker(基于WSL2,包含WSL2安装教程)

    WSL2 wsl是windows自带的功能 只需要开启Windows功能即可安装子系统 可以通过以下命令获取发行版名字 wsl list online 通过以下命令安装 wsl install d 发行版名字 如 wsl install d
  • android input 机制源码分析

    具体文字说明请参考 http blog csdn net luoshengyang article details 6882903
  • 2018年AI趋势盘点(02)

    善用智能之道 请您点击上方蓝色字体 欢迎关注 九三智能控 懒人阅读 2017年被定义为AI的史诗年 九三觉得17年确实引爆了AI 同时泡沫也存在不少 18年的AI将更加务实技术更加接近真实场景 可以确认的一点是 认知决策能力的升级将对所有行
  • WiFi探针的工作原理及采集的数据?

    WiFi探针在商业 公共安全领域的大放异彩 更多的人想了解什么是WiFi探针 WiFi探针是怎么工作的 WiFi探针的工作原理 要深入了解WiFi探针技术 首先先认识WiFi使用的网络协议 WiFi采用的是IEEE802 11协议集 此协议
  • element对上传组件二次封装,vue上传下载组件的实现

    前言 对element的上传组件进行二次封装 让他可以实现上传下载功能 实现效果 手动上传 不是自动 选中文件后可上传 也可清空选中文件 单个删除也是可以的 实现步骤 1 封装好的 uploadAndDown vue源码 引入就好