详解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日

相关文章

  • 用原生 JS 实现 innerHTML 功能实例详解

    让我来详细讲解如何用原生 JS 实现 innerHTML 功能。 1. innerHTML 功能是什么? 在了解如何用原生 JS 实现 innerHTML 功能前,我们需要先了解一下 innerHTML 功能是什么。innerHTML 是一个 DOM 属性,可以将 HTML 代码添加或替换到指定元素内部。 例如,我们有如下 HTML 代码: <div …

    JavaScript 2023年6月10日
    00
  • Javascript中的作用域和上下文深入理解

    Javascript中的作用域和上下文深入理解 在理解Javascript中的作用域和上下文之前,需要先了解一些基本的概念。 作用域 作用域定义了变量和函数的可访问性。在Javascript中,作用域分为全局作用域和函数作用域。全局作用域是在整个程序中都可访问的作用域,而函数作用域只有在函数内部才能访问。 var关键字的作用域 使用var关键字声明的变量的作…

    JavaScript 2023年6月10日
    00
  • JavaScript调用客户端的可执行文件(示例代码)

    在JavaScript中可以使用一些特殊的API来操作客户端的可执行文件,这些API被称作Web API。其中有一个重要的API就是利用浏览器的插件对象来运行客户端的可执行文件。下面给出基于Chrome浏览器和IE浏览器的实现方式。 Chrome浏览器操作客户端的可执行文件 1. 首先需要编写一个简单的插件 插件的主要功能就是用于连接客户端与浏览器,使得浏览…

    JavaScript 2023年5月27日
    00
  • JS彻底弄懂GMT和UTC时区

    JS彻底弄懂GMT和UTC时区 简介 GMT和UTC是两个不同的概念,但它们之间存在一定的关联。GMT表示格林威治标准时间,它源自于英国伦敦附近的格林威治天文台。而UTC表示世界标准时间,它是目前全球时间协调的基础,包含了许多不同的标准,例如UTC+8表示东八区。 在JavaScript中,Date对象用来处理日期和时间。其中的getTimezoneOffs…

    JavaScript 2023年5月27日
    00
  • 使用AJAX实现UTF8编码表单提交到GBK编码脚本无乱码的解决方法

    使用AJAX实现UTF8编码表单提交到GBK编码脚本无乱码的解决方法 在前端页面中使用AJAX提交表单数据到后端脚本时,可能会出现数据编码不一致导致乱码的情况。特别是在前端页面使用UTF8编码时,提交到后端脚本使用GBK编码的情况相对比较常见。 解决这种情况可以采用以下方法: 在AJAX请求中设置contentType和data属性 AJAX发起请求时,可以…

    JavaScript 2023年5月19日
    00
  • 学node 之前你要知道这些

    初识nodejs   19年年底一个偶然的机会接到年会任务,有微信扫码登录、投票、弹幕等功能,于是决定用node 来写几个服务,结果也比较顺利。   当时用看了下koa2的官方文档,知道怎么连接数据库、怎么映射表实体,怎么处理http,怎么处理异常等,就可以直接写起来了。从应用层面上来说 nodejs 入门还是挺简单的,前几天在整理语雀时发现前几年整理的no…

    JavaScript 2023年5月9日
    00
  • JavaScript中while循环的基础使用教程

    当我们需要重复执行一段代码时,可以使用循环。JavaScript 提供了多种循环类型,其中 while 循环是最基本也是最易于理解的一种。本文将详细介绍 JavaScript 中 while 循环的基础使用教程。 while 循环的基本语法 while 循环的基本语法如下: while (condition) { // code to be executed…

    JavaScript 2023年5月28日
    00
  • JavaScript实现多叉树的递归遍历和非递归遍历算法操作示例

    JavaScript实现多叉树的递归遍历和非递归遍历 在JavaScript中,通过对象的嵌套可以实现构造多叉树结构。对多叉树进行遍历,递归算法是最简单和最常用的方法,尤其方便实现先序遍历、中序遍历和后序遍历。非递归算法需要使用栈数据结构,借助栈来模拟递归操作会稍微复杂一些。本文将详细讲解如何在JavaScript中实现多叉树的递归遍历和非递归遍历算法。 创…

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