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

yizhihongxing

下面就是详解 "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日

相关文章

  • 常用js字符串判断方法整理

    常用JS字符串判断方法整理 本文介绍了JS中常用的字符串判断方法,包括正则表达式方法和字符串方法。希望能帮助大家快速了解字符串判断方法的使用。 1. 正则表达式方法 1.1 test()方法 test()方法用于测试一个字符串是否匹配某个正则表达式,返回布尔值。 示例代码: let str = ‘123abc’; // 匹配数字和字母 let reg = /…

    JavaScript 2023年5月28日
    00
  • 详解JavaScript自定义函数

    请看下面的详解: 详解 JavaScript 自定义函数 在 JavaScript 中,函数是一种可被调用的代码块,它可以重复使用,是提高代码复用率的重要手段。JavaScript 中的函数不仅可以使用已有的内置函数,还可以通过自定义函数实现更多的功能。 一、自定义函数的基本定义 JavaScript 中的自定义函数使用 function 关键字定义,其基本…

    JavaScript 2023年5月27日
    00
  • 原生js实现简单轮播图效果

    下面我来详细讲解如何用原生JS实现简单轮播图效果。 步骤1:HTML结构 我们首先需要在HTML文件中创建轮播图的骨架,通常可以使用<ul>标签和若干个<li>标签来实现。例如: <div id="slider"> <ul> <li><img src="slide…

    JavaScript 2023年6月11日
    00
  • JavaScript方法和技巧大全

    JavaScript方法和技巧大全 JavaScript是现代Web开发必备的一种编程语言。在使用JavaScript进行Web开发时,我们经常会遇到各种各样的问题,如浏览器间兼容性、代码的性能优化等。本篇文章将介绍一些在日常开发中常用的JavaScript技巧和方法,帮助Web开发者更好地应对开发难题。 1. 使用对象解构进行变量赋值 对象解构可以帮助我们…

    JavaScript 2023年5月18日
    00
  • asp.net 设置GridView的选中行

    当我们在使用ASP.NET开发Web应用程序时,经常会用到GridView控件来显示数据。在GridView中选中某一行并进行操作,是在Web开发中常见的需求。在这里,我将向您介绍一种完整的方法来实现在ASP.NET中设置GridView的选中行。该方法以C#语言为例进行示范。 1. 设置GridView的选中行 对于设置GridView的选中行,我们可以通…

    JavaScript 2023年6月11日
    00
  • Javascript开发包大全整理

    Javascript开发包大全整理 如果你是Javascript开发者,那么你一定会使用一些Javascript开发包,它们能够帮助你提高开发效率,降低开发难度。 常用的Javascript开发包 以下为常用的Javascript开发包: jQuery jQuery 是一个Javascript库,可以用于简化Javascript代码编写,提高页面操作效果。 …

    JavaScript 2023年5月18日
    00
  • JavaScript中数组对象的那些自带方法介绍

    下面就为大家详细介绍JavaScript中数组对象的自带方法。 1. 增加、删除、修改元素 push、pop、shift、unshift方法 push方法:在数组的末尾插入一个或多个元素,并返回数组新的长度。 pop方法:删除数组的最后一个元素,并返回该元素的值。 shift方法:删除数组的第一个元素,并返回该元素的值。 unshift方法:在数组的开头插入…

    JavaScript 2023年5月27日
    00
  • JavaScript迭代器的含义及用法

    JavaScript迭代器的含义及用法 在Javascript中,迭代器指的是一个能够依次访问集合中的元素的对象。 同时,该示例还实现了一个迭代器方法,可以用来访问集合的每一个元素。 迭代器是用于解决循环一个集合并访问其每个元素的问题。 迭代器对象就像计算机科学中所说的迭代器一样,它跟踪集合中的元素并在必要时返回下一个元素。 迭代器方法返回的对象具有一个ne…

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