详解Element-UI中上传的文件前端处理

下面就是详解 "Element-UI中上传的文件前端处理" 的完整攻略。

一、前言

Element-UI 是饿了么前端团队开发并开源的一款基于 Vue.js 2.0 的 UI 组件库,拥有非常丰富的组件和样式,其中包含了上传文件的组件。然而,如果我们需要自定义上传文件前的处理流程,怎么做呢?本文将详细介绍 Element-UI 中上传文件前端处理的方法。

二、上传文件前端处理的方法

在 Element-UI 中,上传文件主要有两个组件:el-uploadel-upload-dragger,分别用于选择文件和拖拽上传。

1. el-upload 的上传前处理方法

当我们使用 el-upload 组件上传文件时,可以通过配置 before-upload 属性来实现上传前的处理。

<el-upload
  class="upload-demo"
  action="/upload"
  :before-upload="checkImage"
>

在上述代码中,我们通过配置 before-upload 属性绑定一个名为 checkImage 的方法,在上传前进行图片格式检查,然后再返回 truefalse,来决定是否继续上传。

下面是一个示例代码,实现上传图片前的宽高检查处理:

<template>
  <el-upload
    class="avatar-uploader"
    action="//jsonplaceholder.typicode.com/posts/"
    :show-file-list="false"
    :before-upload="handlerImageUpload">
    <div class="avatar-box">
      <img v-if="showImg" :src="imageUrl" class="avatar">
      <div v-else class="avatar-placeholder">
        <i class="el-icon-plus avatar-uploader-icon"></i>
      </div>
    </div>
  </el-upload>
</template>

<script>
  export default {
    data() {
      return {
        imageUrl: '',
        showImg: false
      }
    },
    methods: {
      async handlerImageUpload(file) {
        const { width, height } = await this.getImageSize(file)
        if (width < 400 || height < 400) {
          this.$message.warning('图片宽高不能小于400像素')
          return false
        } else {
          this.imageUrl = URL.createObjectURL(file)
          this.showImg = true
          return true
        }
      },
      getImageSize(file) {
        return new Promise(resolve => {
          const img = new Image()
          img.onload = () => {
            resolve({
              width: img.width,
              height: img.height
            })
          }
          img.src = URL.createObjectURL(file)
        })
      }
    }
  }
</script>

<style scoped>
  .avatar-uploader {
    display: inline-block;
    width: 100px;
    height: 100px;
    margin-right: 10px;
  }

  .avatar-box {
    position: relative;
    width: 100%;
    height: 100%;
  }

  .avatar {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    border: 1px solid #dcdfe6;
    background-size: cover;
    background-position: center;
  }

  .avatar-placeholder {
    border: 1px dashed #dcdfe6;
    border-radius: 50%;
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    text-align: center;
    line-height: 99px;
    font-size: 22px;
    color: #8c939d;
    box-sizing: border-box;
  }

  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    line-height: 99px;
  }
</style>

在以上代码中,我们在 handlerImageUpload 方法中获取文件的大小和宽高等信息,并根据宽高限制决定是否上传,最后返回 truefalse

2. el-upload-dragger 的上传前处理方法

当我们使用 el-upload-dragger 组件上传文件时,可以在 before-upload 事件中进行上传前的处理。

<el-upload-dragger
  class="upload-demo"
  action="/upload"
  @before-upload="checkImage"
>

在上述代码中,我们通过配置 before-upload 事件绑定一个名为 checkImage 的方法,在上传前进行图片格式检查,然后再返回 truefalse,来决定是否继续上传。

下面是一个示例代码,实现拖拽上传前的宽高检查处理:

<template>
  <el-upload-dragger
    class="avatar-uploader"
    :show-file-list="false"
    :before-upload="handlerImageUpload">
    <div class="avatar-box">
      <img v-if="showImg" :src="imageUrl" class="avatar">
      <div v-else class="avatar-placeholder">
        <i class="el-icon-plus avatar-uploader-icon"></i>
        <div class="avatar-text">拖拽上传图片</div>
      </div>
    </div>
  </el-upload-dragger>
</template>

<script>
  export default {
    data() {
      return {
        imageUrl: '',
        showImg: false
      }
    },
    methods: {
      async handlerImageUpload(file) {
        const { width, height } = await this.getImageSize(file)
        if (width < 400 || height < 400) {
          this.$message.warning('图片宽高不能小于400像素')
          return false
        } else {
          this.imageUrl = URL.createObjectURL(file)
          this.showImg = true
          return true
        }
      },
      getImageSize(file) {
        return new Promise(resolve => {
          const img = new Image()
          img.onload = () => {
            resolve({
              width: img.width,
              height: img.height
            })
          }
          img.src = URL.createObjectURL(file)
        })
      }
    }
  }
</script>

<style scoped>
  .avatar-uploader {
    display: inline-block;
    width: 100px;
    height: 100px;
    margin-right: 10px;
  }

  .avatar-box {
    position: relative;
    width: 100%;
    height: 100%;
  }

  .avatar {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    border: 1px solid #dcdfe6;
    background-size: cover;
    background-position: center;
  }

  .avatar-placeholder {
    border: 1px dashed #dcdfe6;
    border-radius: 50%;
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    text-align: center;
    box-sizing: border-box;
    overflow: hidden;
  }

  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    line-height: 99px;
  }

  .avatar-text {
    font-size: 12px;
    color: #8c939d;
    margin-top: 10px;
  }
</style>

以上就是 Element-UI 中上传文件前端处理的详细攻略,我们可以在上传前进行自定义的处理,来实现更加丰富的上传交互效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Element-UI中上传的文件前端处理 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • javascript的数组方法大全

    JavaScript的数组方法大全 JavaScript中的数组是一种非常强大和常用的数据结构,可以存储任何类型的数据,并且提供了很多方便的数组方法来操作数组。在本篇文章中,我们将介绍JavaScript的所有数组方法,并提供示例说明用法。 push()方法 push()方法将一个或多个元素添加到数组的末尾。 let fruits = [‘apple’, ‘…

    JavaScript 2023年5月18日
    00
  • 原生JavaScript编写俄罗斯方块

    编写俄罗斯方块是一个非常有趣和实用的JavaScript项目。以下是一些步骤和示例代码,可以帮助您开始编写自己的俄罗斯方块游戏。 步骤一:创建HTML文件 首先,我们需要创建一个HTML文件,在其中添加一个canvas元素来展示俄罗斯方块游戏。以下是一个示例HTML文件: <!DOCTYPE html> <html> <head…

    JavaScript 2023年6月10日
    00
  • JS显示下拉列表框内全部元素的方法

    关于“JS显示下拉列表框内全部元素的方法”的完整攻略,我来给您讲解一下。 确定需求 要实现下拉列表框内全部元素的显示,我们需要先明确我们的需求,确定我们希望通过什么方式来实现这个功能。通常情况下,实现下拉列表框内全部元素的显示,我们可以采用以下两种方式: 将下拉列表框的size属性值设置为需要显示的元素个数; 通过JS获取下拉列表框中所有的选项元素,并动态为…

    JavaScript 2023年6月11日
    00
  • 面向对象的Javascript之三(封装和信息隐藏)

    我会详细讲解“面向对象的Javascript之三(封装和信息隐藏)”的完整攻略。 面向对象的Javascript之三(封装和信息隐藏) 什么是封装? 封装是一种面向对象的编程思想,通过将数据和对数据的操作(即方法)封装在一个对象内部,以实现对对象的控制和保护。 封装可以分为两个方面: 将数据隐藏在对象内部,以避免外部对数据的不当操作。 将方法隐藏在对象内部,…

    JavaScript 2023年6月10日
    00
  • JS时间特效最常用的三款

    JS时间特效是网站开发中经常使用的技术,比如动态时间显示、倒计时等,下面介绍三款JS时间特效,分别是CountUp.js、Moment.js和Timeago.js。 CountUp.js CountUp.js是一个小型的、跨平台JavaScript库,用于轻松地实现计数器动画。步骤如下: 首先,从GitHub仓库中下载 CountUp.js 库,并将其添加到…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript中的Base64编码字符串

    深入理解JavaScript中的Base64编码字符串 什么是Base64编码字符串? Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式,其常用于在网络上传输数据,例如将图片或音频文件转换为Base64编码字符串,然后将其作为字符串传输。 Base64编码将每3个字节转换为4个ASCII字符,字节不足时会进行填充。Base64编码表中包…

    JavaScript 2023年5月19日
    00
  • 解决JS浮点数运算出现Bug的方法

    下面是针对解决JS浮点数运算出现Bug的方法的完整攻略: 解决JS浮点数运算出现Bug的方法 问题描述 在JavaScript中,进行浮点数运算时,会出现精度问题,例如: 0.1 + 0.2 // 0.30000000000000004 这是因为JavaScript采用的是IEEE 754标准定义的64位双精度浮点数,无法精确表示某些小数。这种问题会影响到一…

    JavaScript 2023年6月11日
    00
  • javascript判断元素存在和判断元素存在于实时的dom中的方法

    判断元素是否存在于DOM中是Javascript中经常遇到的一个问题,特别是在进行DOM操作和事件处理的时候。下面是两种常见的判断元素的方法: 一、使用document.querySelector() 通过使用document.querySelector()方法来查找元素,如果返回值不为null,那么表示找到了该元素,否则表示没有找到该元素。 var ele…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部