element-ui el-upload 限制上传图片格式,大小,比例

文章介绍了如何在Vue项目中使用El-upload组件时,对上传图片的格式(.png/.jpg/.gif)、大小(不超过2MB)以及比例(1:1)进行限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

限制上传图片格式,大小,比例代码

<template>
  <div>
    <!-- :show-file-list="false" -->
    <el-upload
      class="avatar-uploader"
      action=""
      accept=".png,.jpg,.gif"
      :http-request="fnUploadRequest"
      :before-upload="beforeAvatarUpload"
      :show-file-list="false"
    >
      <img
        v-if="ImgUrl"
        :src="ImgUrl"
        class="avatar"
        alt=""
      >
      <i v-else class="el-icon-plus avatar-uploader-icon" />
    </el-upload>
  </div>
</template>
<script>
export default {
  data() {
    return {
      ImgUrl: ''
    }
  },
  methods: {

    async fnUploadRequest(options) {
      console.log('覆盖默认的上传行为,自定义上传', options)
    },
    /**
     * 限制上传图片格式,大小,比例
     * */
    beforeAvatarUpload(file) {
      console.log(file)
      const isJpgPng = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/gif'

      if (!isJpgPng) {
        this.$message.error('上传文件格式只能是jpg/png/gif')
        return false
      }

      const isLt2M = file.size / 1024 / 1024 < 2
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!')
        return false
      }
      const isSize = new Promise(function(resolve, reject) {
        const img = new Image()
        img.onload = function() {
          const valid = img.width / img.height === 1
          valid ? resolve() : reject()
        }
        img.src = URL.createObjectURL(file)
      }).then(() => {
        return file
      }, () => {
        this.$message.error('上传图片比例只能为1:1, 请重新选择上传!')
        return Promise.reject()
        // return false
      })
      return isJpgPng && isLt2M && isSize
    }
  }
}
</script>

<style lang="scss" scope>
.avatarImg {
  width: 178px;
  height: 178px;
  display: block;
  background: #97a8be;
}
.hide .el-upload--picture-card {
  display: none;
}
.el-upload--picture-card{
  .avatar-uploader-icon {
    font-size: 28px;
    color: #8c939d;
    width: 148px;
    height: 148px;
    line-height: 148px;
    text-align: center;
  }
}
.svgaView{
  .el-icon-plus{
    font-size: 28px;
    color: #8c939d;
    width: 178px;
    height: 178px;
    line-height: 178px;
    text-align: center;

  }
}
</style>

### Element UI `el-upload` 组件使用指南 #### 基本配置与属性说明 Element UI 的 `el-upload` 组件用于处理文件上传功能。通过指定不同的属性可以轻松定制化该组件的行为和外观[^1]。 - **action**: 文件上传的网络请求地址,必填项。 - **headers**: 设置上传请求头部信息,在实际项目开发过程中可能涉及到权限验证等问题,此时可以在 headers 中加入 token 或者其他认证参数[^2]。 ```html <template> <div class="upload-demo"> <el-upload :headers="{'Authorization': 'Bearer ' + getToken()}" action="https://jsonplaceholder.typicode.com/posts/" multiple> <button type="button">点击上传</button> </el-upload> </div> </template> <script setup lang="ts"> function getToken(): string { const storedToken = localStorage.getItem('token'); return storedToken ? JSON.parse(storedToken) : ''; } </script> ``` #### 多文件上传支持 为了实现多文件的同时上传,只需简单地给 `<el-upload>` 添加 `multiple` 属性即可允许用户一次选择多个文件进行上传操作。 #### 自定义样式与交互逻辑 除了基本的功能外,还可以进一步自定义按钮文字、图标以及触发方式等细节来满足特定需求。比如可以通过 slot 插槽来自由设计上传区域内的内容展示形式;也可以监听事件(如 file-list change)来做更复杂的业务流程控制[^3]。 #### WebSocket 支持下的分片传输方案 对于大文件或者需要实时反馈进度的情况,则可考虑采用基于 WebSockets 协议的数据流式发送机制来进行优化改进。具体做法参见开源仓库中的实例代码片段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值