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

相关文章

  • 自己动手写一个java版简单云相册

    如何自己动手写一个java版简单云相册? 在这个攻略中我们将使用Spring Boot和Thymeleaf模板引擎来搭建一个简单的云相册,允许用户上传并分享自己的照片。以下是该应用程序的主要功能: 用户可以在相册中上传自己的照片 用户可以查看所有已上传的照片 用户可以通过链接轻松共享照片 未登录的用户无法上传照片 接下来,让我们一起进行这个项目的实现吧。 第…

    JavaScript 2023年6月11日
    00
  • cookie的secure属性详解

    Cookie的secure属性详解 什么是Cookie? Cookie是一种由Web服务器存储在Web浏览器上的小文本文件。当Web浏览器向同一服务器发出请求时,会将Cookie发送回服务器。在服务器处理请求时,Cookie提供了一种追踪用户的机制,以便在多个页面或跨站点之间保持状态信息。因此,Cookie是Web应用程序的重要组成部分。 Cookie的Se…

    JavaScript 2023年6月11日
    00
  • js获取单选按钮的数据

    获取单选按钮的数据在实际应用中非常常见,以下是 js 获取单选按钮数据的完整攻略: 1. 获取单选按钮的选中状态 要获取单选按钮的数据,首先需要知道单选按钮的选中状态。单选按钮的选中状态可以通过其 checked 属性来获取。checked 属性是一个布尔值,表示单选按钮是否被选中。若该属性为 true,则表示单选按钮被选中。 下面是获取单选按钮的选中状态的…

    JavaScript 2023年6月10日
    00
  • 提交表单时执行func方法实现代码

    当用户提交表单时,我们可以使用JavaScript中的addEventListener方法或者onsubmit属性来绑定一个回调函数来实现代码逻辑。以下是实现步骤: 1. 编写HTML表单 首先需要编写一个HTML表单: <form id="myForm"> <input type="text" na…

    JavaScript 2023年6月10日
    00
  • 关于JavaScript数组你所不知道的3件事

    关于JavaScript数组你所不知道的3件事 本文将介绍三个在JavaScript中数组的使用中可能相对容易被忽视但实际上很有用的特性。 1. 数组长度不是只读属性 在JavaScript中,数组长度可以被更改,而且这并不会影响已经存在的元素。我们可以通过调用Array.prototype.length来获取数组长度,也可以通过设置该属性来更改数组长度。 …

    JavaScript 2023年5月18日
    00
  • js中的this的指向问题详解

    下面给出“js中的this的指向问题详解”的完整攻略: 一、概述 在JavaScript中,this关键字总是指向调用该函数的对象。但是,在不同的情况下,this指向的对象也会有所不同。因此,理解this的指向问题对于JavaScript编程非常重要。 二、this的四种绑定方式 this的指向主要有四种绑定方式: 默认绑定:独立的函数调用,this指向全局…

    JavaScript 2023年6月10日
    00
  • JavaScript实现的图片3D展示空间(3DRoom)

    下面是针对“JavaScript实现的图片3D展示空间(3DRoom)”的完整攻略: 简介 “JavaScript实现的图片3D展示空间(3DRoom)”是基于HTML、CSS和JavaScript技术实现的一种图片3D展示方式。它可以将图片以独特的方式展现出来,使用户有一种身临其境的感觉。本攻略将介绍如何实现这种效果。 步骤 搭建HTML骨架 要实现“Ja…

    JavaScript 2023年6月10日
    00
  • 详解Bootstrap创建表单的三种格式(一)

    我可以给你详细讲解一下“详解Bootstrap创建表单的三种格式(一)”的完整攻略。 标题 首先,我们需要了解Bootstrap是什么以及它的作用。Bootstrap是Twitter公司开源的一款前端开发框架,主要用于快速实现响应式布局和美化各类界面。特别是在表单的开发中,它们的优势会显得更加明显。Bootstrap提供了三种创建表单的格式,接下来分别进行详…

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