vue+antd上传组件(Upload)的简单案例

封装a-upload上传,删除,预览图片组件(转base64)+上传前压缩体积功能 组件封装,进行图片上传。 阅读详情

概要:使用antd的Upload组件自定义上传功能,包含上传、文件验证、回传(成功/失败);

步入正题:

1、创建upoload.vue,编写demo代码:

<template>
  <a-modal
    v-model="visible"
    centered
    :mask-closable="false"
    :width="480"
    :footer="null"
    @cancel="hideModal"
  >
    <div class="outer">
      <div v-if="uploadStep==='upload'">
        <p class="uploadTitle">
          上传文件
        </p>
        <p>
          本地上传 Excel 文件
        </p>
        <p>
          不符合格式的Excel会导致上传失败
        </p>
        <a-upload
          name="file"
          :action="uploadUrl"
          :show-upload-list="false"
          @change="checkFile"
        >
          <a-button
            type="primary"
          >
            <a-icon type="upload" />上 传
          </a-button>
        </a-upload>
        <p>
          <span>或</span>
        </p>
        <a-button
          type="link"
          icon="download"
          @click="downloadTemplate"
        >
          下载模板
        </a-button>
      </div>
      <div v-if="uploadStep==='cover'">
        <img
          class="uploadIco1"
          src="@assets/images/waiting.png"
        >
        <p>
          请确认是否覆盖?
        </p>
        <p>
          点击“确定”继续上传,点击“取消”中断上传
        </p>
        <div>
          <a-button @click="handleRestart">
            取消
          </a-button>
          <a-button
            type="primary"
            @click="handleCover"
          >
            确定
          </a-button>
        </div>
      </div>
      <div v-if="uploadStep==='loading'">
        <a-icon
          type="loading"
          class="uploading"
        />
      </div>
      <div v-if="uploadStep==='success'">
        <img
          class="uploadIco1"
          src="@assets/images/success.png"
        >
        <div>
          上传成功!<br>正在自动跳转...
        </div>
        <div>
          跳转倒计时:{{ CountDown }}秒
        </div>
      </div>
      <div v-if="uploadStep==='fail'">
        <img
          class="uploadIco2"
          src="@assets/images/fail.png"
        >
        <p>
          {{ failMessage }}
        </p>
        <a-upload
          name="file"
          :action="uploadUrl"
          :show-upload-list="false"
          @change="checkFile"
        >
          <a-button type="primary">
            重新上传
          </a-button>
        </a-upload>
        <p>
          <span>或</span>
        </p>
        <a-button
          type="link"
          icon="download"
          @click="downloadTemplate"
        >
          下载模板
        </a-button>
      </div>
    </div>
  </a-modal>
</template>

2、按需引入antd的组件,定义常量:

<script>
import Vue from 'vue'
import { Modal, Button, Icon, Upload } from 'ant-design-vue'

Vue.use(Modal)
Vue.use(Button)
Vue.use(Icon)
Vue.use(Upload)

// 上传组件
export default {
  name: 'Upload',
  data() {
    return {
      visible: false,
      uploadStep: '',
      uploadUrl: '',
      failMessage: '',
      CountDown: '',
    }
  },
}

3、调用的方法以及交互逻辑代码(验证文件、是否覆盖已有文件、状态返回)

methods: {
    showModal(){
        this.visible = true;
        this.uploadStep = 'upload'
    },
    hideModal(){
        this.visible = false;
        // 为了体验效果,这里可以增加延时代码
        this.uploadStep = ''
    },
    // 点击下载模板
    downloadTemplate() {
      const a = document.createElement('a')
      a.href = 'url' //url=模版详细地址,此处仅用“url“代替详细地址的具体内容
      a.target = '_blank'
      a.click()
    },
    // 校验excel
    async checkFile(info) {
      // 符合返回成功和解析的json数据(二次上传),不符合返回报错信息,重新上传
      if (info.file.status === 'done') {
        const result = info.file.response
        if (!result.status) {
          this.failMessage = result.message
          this.uploadStep = 'fail'
        } else {
          if (!result.cover) {
            let timeout = null
            clearTimeout(timeout)
            this.uploadStep = 'loading'
            timeout = setTimeout(() => {
              this.upload()
            }, 1000)
          } else {
            this.uploadStep = 'cover'
          }
        }
      } else if (info.file.status === 'error') {
        // 网络异常报错
        this.failMessage = '网络错误'
        this.uploadStep = 'fail'
      }
    },
    // 校验通过,创建或覆盖原数据
    async upload() {
      try {
        await //此处增加接口请求,上传文档或数据
        // 上传成功 3秒倒计时 跳转
        this.uploadStep = 'success'
        const TIME_COUNT = 3
        this.CountDown = TIME_COUNT
        this.timer = setInterval(() => {
          if (this.CountDown > 1 && this.CountDown <= TIME_COUNT) {
            this.CountDown--
          } else {
            clearInterval(this.timer)
            this.timer = null
            // 跳转的页面写在此处
            this.$router.replace({
                name: 'uploadFilesPage',
            })
          }
        }, 1000)
      } catch (error) {
        // 网络异常报错
        const msg = error.errorMessage || error.message || '网络错误'
        this.failMessage = msg
        this.uploadStep = 'fail'
      }
    },
    // 覆盖原文件
    handleCover() {
      let timeout = null
      clearTimeout(timeout)
      this.uploadStep = 'loading'
      timeout = setTimeout(() => {
        this.upload()
      }, 1000)
    },
    // 点击取消,返回伤处初始界面
    handleRestart() {
      this.uploadStep = 'upload'
    },

}

  本文是对upload组件的简单使用过程,代码拿来即用,希望能起到一个抛砖引玉的作用。感谢阅读!

 

ant-design-vue中的视频上传组件upload自定义本地预览视频、校验视频类型、校验上传视频文件大小等功能 新项目中需要用到新闻视频上传功能,UI组件库采用的是ant-design-vue,所以就用里面的upload组件改造自定义了一个视频上传组件。上代码: 关键定义点在于 1.校验视频文件大小: //校验 文件大小 checkSize(file, size) { let that = this return new Promise(function (resolve, reject) { if (file.size / 1024 > s 阅读详情

相关推荐

使用a-upload上传图片或者文件(符合规则,显示在fileList,不符合不显示)

文件或者图片上传

chali1314的博客 3959

a-upload文件上传

通过自定义函数解决调用a-upload的onsuccess函数无效的问题。

哈哈哈哈 8969

Vue3+AntdesignVue3/ElementPlus a-upload实现上传(上传前控制类型,数量,多文件限制大小自动拦截)、预览、单个下载、删除(删除前确认)、批量下载(压缩包)(终极版)

文件限制一张 需要替换掉上次上传的文件 用到slice(-1) 代表获取数组末尾的元素。这里设置为true还是不显示问题 需要回显时将文件的status改为done。批量下载文件 文件类型为压缩包文件流。resolve(true)确认删除。多文件上传 限制大小 自动过滤拦截。rejcet(false)不删除。上传限制一张文件并且限制文件类型。添加Promise对象接收。表单提交 文件转文件流。

朝花夕拾的博客 2469

【vue】AntDV组件库中a-upload实现文件上传:

【vue】AntDV组件库中a-upload实现文件上传:

SunPeng的博客 4593

ant自动获取文件路径

NULL 博文链接:https://xnbhnly.iteye.com/blog/1109967

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

antd upload手动上传_Vue实战:文件上传组件

文件上传是我们作为开发者在日常工作中经常遇到的一个需求,各个流行的组件库中也都有现成的组件可以很方便的直接调用。具体的用法不再赘述,小伙伴们可以在组件库中查看demo,这里笔者主要介绍下如何实现一个Upload组件。组件支持的功能如下:上传进度条显示图片预览自定义上传请求方法图片数量限制支持拖拽上传使用koa以及对应的中间件实现图片上传服务器接口最终效果图如下: 相关资料:组件源代码服务端上传接口...

weixin_30299099的博客 2659

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 949

antd 上传进度_antd vue upload组件使用customRequest上传文件显示文件上传进度

antd-vue上传文件upload组件使用自定义上传方法customRequest无法显示文件上传进度条,如下图红框内的进度条无法显示当前文件上传进度于是,在网上搜索解决方案:第一种解决方案是自己封装组件,通过axios请求的onUploadProgress来获取文件上传进度,个人觉得太麻烦;我采用了第二种解决方案,但是使用调用不了参考文章中的`options.onSuccess(res, op...

weixin_39653311的博客 4155

Qt for Android:基于libusb实现CH340x串口通信的高效开发方案

本文详细介绍了在Qt for Android环境下,基于libusb实现CH340x串口通信的高效开发方案。通过绕过Android高版本系统的权限限制,利用libusb+JNI技术实现稳定通信,适用于工业手持终端等场景。文章涵盖环境搭建、核心实现、常见问题解决方案及性能调优经验,帮助开发者快速掌握这一关键技术。

weixin_42715608的博客 426

ArduPilot代码解析之四 — 姿态和位置控制

ArduPilot采用级联控制架构实现飞行器的姿态和位置管理。该系统通过位置→速度→加速度→姿态→角速率→电机指令的逐级转换,将高级指令转化为底层执行信号。位置控制采用三维独立控制,水平轴与垂直轴分别处理;姿态控制通过角度误差→角速率→电机输出的两层级联实现。系统支持多种输入模式,并内置运动学整形功能确保轨迹平滑。不同飞行器类型(多旋翼、直升机、潜艇等)有专门的调参方案,通过调整PID参数、加速度限制等实现最优控制性能。该架构兼顾控制精度与飞行稳定性,适用于各类自主飞行场景。

rainercool的专栏 825

antd upload组件踩坑

组件使用代码: <Upload action="http://api.hnzhiu.com/api/v1/uploads"//必须写,不然上传图片时的状态不会有done listType="picture-card" showUploadList={false} beforeUpload={this.beforeUpload}//上传图片时的校验:格式、大...

乌龟不背壳 3872

使用Gromacs进行蛋白和配体小分子的动力学模拟+结果分析全流程教程

先选protein,选择non-water,使用pymol打开delWater.pdb,输入util.ss('all')展示cartoon,点击file-Export Moive as-MPEG。这一步完成后,文件夹中会出现以下三个文件,其中gro 文件用于记录蛋白的初始坐标,top 文件记录蛋白的拓扑信息和力场信息,itp 与top文件类似。接下来使用Spdbv软件打开蛋白,如果蛋白中存在原子缺失情况,就会出现以下的提示,如果不存在就不会显示,同时保存为rep.pdb。

weixin_46587777的博客 2851

react+antd的upload限制只上传一个文件

react+antd的upload限制只上传一个文件 目前在做一个react+antd的项目,在使用antd(3.26.16版本)中的Upload上传,网上很多教程但是不太好改写为自己所用,发现antd的官方文档自带解决办法,一行搞定!!!!!! 需求:只能上传一个文件,上传第二个文件时候会有提示,并保留第一个文件 问题:上传第二个文件提示后,第一个文件也一起被消失了 解决:e.fileList = e.fileList.slice(-1); // -1只能上传一个文件,-2能上传两个,以此类推 e.fi

weixin_43684142的博客 6236

Unity GameObject 核心机制深度解析:从底层结构到工程实践

从底层机制讲透 Unity GameObject:托管壳加原生芯的双层对象模型如何制造假 null 陷阱、Transform 层级与组件通信的原理、生命周期回调的确切顺序。文章同时给出 Instantiate 成本分析与对象池等高频场景的工程实践。

游戏人生 40

全面解析量化价值投资多因子模型的原理

明明知道“买便宜的好公司”是价值投资的核心,但面对3000+只A股,如何快速筛选出“便宜又好”的标的?主观判断总被情绪干扰——明明PE很低的股票,买了却不涨;或者因为“感觉”错过牛股?想规模化投资,但手动分析100只股票就要花一周,根本无法覆盖全市场?量化价值投资的多因子模型,正是解决这些问题的钥匙。它将价值投资的核心逻辑(“便宜”“好公司”)转化为可量化的因子,用数学模型替代主观判断,实现系统化筛选、可回测验证、规模化复制的投资决策。为什么多因子模型能有效预测股票收益?

AI天才研究院 1058

antd vue表单上传文件_antd组件Upload实现自己上传

前言在实现图片上传时,可能需要用到Upload,但是它默认的上传方式是加入图片后直接上传,如果要实现最后再一次性上传,需要自定义内容。//添加按钮的样式const uploadButton = (Upload);//样式className={styles['override-ant-btn']}//陈列样式,现在是卡片式listType="picture-card"//再图片上传到页面后执行的函数...

weixin_30738065的博客 3397

ESP32设备驱动-TM1637-驱动4位7段数码管

TM1637是一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成了MCU数字接口、数据锁存、LED高压驱动、键盘扫描等功能。 TM1637使用DIP20/SOP20封装,主要适用于电磁炉、微波炉、小家电的显示驱动。

视觉与物联智能 2117

antd-design-vue上传组件(upLoad)使用总结

项目需求中总是会有上传图片文件等功能,现在有时间正好做下简单总结 一般常用的几个属性就是fileList,customRequest,multiple,showUploadList,before 常用事件就是change 1、multiple 这个就是在选择文件的时候是否能够多选,设置为true可以多选,不必多说 2、showUploadList 这个属性如果设置为 :showUploadList=false的话,就是不展现上传后的列表 就是这个列表将不做展...

dashinihao的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

antd vue upload组件上传视频并实现视频预览

antd vue upload组件上传视频并实现视频预览 html代码 <form> <a-form-item label="商品视频" :labelCol="{span: 4}" :wrapperCol="{span: 18}" > <a-upload v-de

abc15361614702的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

antd-vue upload组件使用ali-oss sts上传图片

antd-vue upload组件使用ali-oss sts上传图片引入js组件 部分代码结束 引入 npm install ali-oss js 出现异常时,重新获取一下sts的token import OSS from 'ali-oss' import { csyApi } from '../api/csy' let stsInfo = { accessKeyId: null, acc...

SoOnPerson的博客 3313

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

antd 解决Upload组件before-upload无效的问题

使用antd+Vue的时候,有个上传视频的操作,当使用upload组件上传时,参考官网简单的实例,并不能手动上传。研究一番后发现使用before-upload属性可行,但是碰到了点问题: 我的需求是在上传到服务器之前,判断是否存在同名文件,存在则直接将同名文件地址写入表单,免去上传。初步编码如下: beforeUpload (file, fileList) { return this.$http.get('/cms/charge/material/isCopy?name=' + file...

B★R★S的博客 6875

Vue中图片上传组件封装-antd的a-upload二次封装-案例

Vue中图片上传组件封装-antd的a-upload二次封装

JackieDYH的博客 4957

Ant Design Pro of Vue2 文件上传组件 Upload 自定义上传实战笔记

在使用 Ant Design Pro of Vue2 框架进行项目开发过程中,不可避免的遇到文件上传类的功能需求,本文就实战过程中遇到的一些经验和问题做个分享,为自己做个笔记,也为需要帮助的同学做个参考!

将PHP Web开发进行到底 3940

【antd Vue】封装upload图片上传组件(返回Base64)

最近需要把上传的图片信息存储到数据库,以base64的方式,需要重新封装一下antd的upload组件 1. 使用方法 引入组件然后配置一下即可使用,配置项包括 defaultImageList,需要回显的图片(必传),[ url1, url2 ] fileTypeList ,文件格式(可选),默认不做限制 limitSize ,单个图片大小限制(可选),单位MB limitNum ,上传图片个数限制(可选),默认200个 multipl.

无知而狂妄 3345

antd上传组件upload+阿里oss实现上传功能

antd上传组件upload+阿里oss实现上传功能

yehaocheng520的博客 3720
上一篇: vue + antd项目中关于Table的那些事儿之排序筛查
下一篇: vue+antd复选框(checkbox)实现全选与部分选择
Wendy__Wang
博客等级 码龄17年 24粉丝 11原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值