当前位置: 首页 > news >正文

vue2.0 多图片上传组件(el-upload)

组件:多图片上传(el-upload)

<template>
  <div>
    <el-upload
      ref="elUpload"
      :action="uploadPath"
      :headers="headers"
      list-type="picture-card"
      :on-preview="handlePictureCardPreview"
      :before-remove="beforeRemove"
      :on-remove="handleRemove"
      :on-success="handleUploadSuccess"
      :on-exceed="handleUploadExceed"
      :file-list="imageList"
      accept=".jpeg,JPEG,.jpg,.JPG,.png,.PNG,gif,.GIF"
      :before-upload="beforeAvatarUpload"
      :limit="limit"
    >
      <i class="el-icon-plus" />
    </el-upload>
    <el-dialog :visible.sync="dialogVisible" top="2vh" append-to-body>
      <img width="100%" :src="dialogImageUrl" alt="">
    </el-dialog>
  </div>
</template>

<script>
import { getToken } from '@/utils/auth'
export default {
  props: {
    value: {
      default: '',
      type: String
    },
    // 图片限制数量,默认3个
    limit: {
      type: Number,
      default() {
        return 3
      }
    }
  },
  data() {
    return {
      dialogImageUrl: '',
      dialogVisible: false,
      resourcesUrl: '',
      // 此处路径配置成自己的上传文件地址
      uploadPath: process.env.VUE_APP_BASE_API + '/api/file/test/upload',
      headers: {
        'Authorization': getToken()
      }
    }
  },
  computed: {
    imageList() {
      const res = []
      if (this.value) {
        const imageArray = this.value.split(',')
        for (let i = 0; i < imageArray.length; i++) {
          res.push({ url: this.resourcesUrl + imageArray[i], response: imageArray[i] })
        }
      }
      this.$emit('input', this.value)
      return res
    }
  },
  methods: {
    // 图片上传
    handleUploadSuccess(response, file, fileList) {
      console.log(file)
      console.log(fileList)
      const pics = fileList.map(file => {
        if ((typeof file.response) === 'object') {
          return file.response.fileUrl
        } else {
          return file.response
        }
      }).join(',')
      console.log(pics)
      this.$emit('input', pics)
    },
    handleUploadExceed(files, fileList) {
      this.loading = false
      this.$message.warning(`对不起,最多上传个` + fileList.length + `图片`)
    },
    // 限制图片上传大小
    beforeAvatarUpload(file) {
      const isPic =
        file.type === 'image/jpeg' ||
        file.type === 'image/png' ||
        file.type === 'image/gif' ||
        file.type === 'image/jpg'
      const isLt8M = file.size / 1024 / 1024 < 8
      if (!isPic) {
        this.$message.error('上传图片只能是 JPG、JPEG、PNG、GIF 格式!')
        return false
      }
      if (!isLt8M) {
        this.$message.error('上传图片大小不能超过 8MB!')
      }
      return isPic && isLt8M
    },
    beforeRemove(file, fileList) {
      return this.$confirm(`确定移除该图片?`)
    },
    handleRemove(file, fileList) {
      const pics = fileList.map(file => {
        return file.response
      }).join(',')
      this.$emit('input', pics)
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url
      this.dialogVisible = true
    }
  }
}
</script>

<style lang="scss">
</style>

使用

  1. 在需要使用文件上传页面的.vue文件中引用
    组件路径如下图:

组件目录

import mulPicUpload from '@/components/MulPicUpload'
  1. 注入
components: { mulPicUpload }
  1. 使用(不写limit时,默认文件限制数为3;文件大小限制为8M;多个文件时,picUrl的值为“英文逗号”隔开的字符串)
<mul-pic-upload v-model="form.picUrl" :limit="1"/>

相关文章:

  • json对象转map,map转list
  • 关于-webkit-的一些用法
  • CSS:字数超出两(n)行,省略号表示
  • Vant轮播多个,实现一次轮播中展示多个div,此处以三个一屏为例
  • ElementUI Tooltip 文字提示应用及更改宽度和背景色
  • vuex最详细完整的使用用法(转载)
  • vue移动端网页适配
  • 前端性能优化之Gzip打包
  • 初使用uni-app,适配多端,踩坑及经验合集
  • vscode 代码保存eslint自动格式化,最新配置:Eslint+Prettier
  • less清除浮动clearfix代码片段
  • Git使用及配置
  • Jenkins安装部署及实现CI/CD(ubuntu20.04)
  • Apache+tomcat安装 linux
  • 数字信封+数字签名流程图
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【mysql】环境安装、服务启动、密码设置
  • conda常用的命令
  • Create React App 使用
  • Javascript编码规范
  • JAVA之继承和多态
  • MySQL几个简单SQL的优化
  • MySQL-事务管理(基础)
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • Vultr 教程目录
  • yii2权限控制rbac之rule详细讲解
  • 电商搜索引擎的架构设计和性能优化
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何设计一个微型分布式架构?
  • 设计模式(12)迭代器模式(讲解+应用)
  • 使用 5W1H 写出高可读的 Git Commit Message
  • # 达梦数据库知识点
  • (1)虚拟机的安装与使用,linux系统安装
  • (33)STM32——485实验笔记
  • (Java)【深基9.例1】选举学生会
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计ssm电影分享网站
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ****Linux下Mysql的安装和配置
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET6 命令行启动及发布单个Exe文件
  • .net6使用Sejil可视化日志
  • .net流程开发平台的一些难点(1)
  • .NET值类型变量“活”在哪?
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • .net中的Queue和Stack
  • .NET中两种OCR方式对比