首页 > 其他分享 >el-upload批量图片上传封装

el-upload批量图片上传封装

时间:2023-03-29 17:33:18浏览次数:30  
标签:el 封装 upload fileList file 上传 图片

需求:

实现图片一次性上传

 

 调一次接口

 

子组件

<template>
  <div class="uploadDiv">
    <el-upload
      ref="upload"
      action="#"
      list-type="picture-card"
      :headers="headers"
      :limit="100"
       multiple
       drag
      :show-file-list="true"
      :auto-upload="false"
      :accept="picAccept"
      :file-list="fileList"
      :on-preview="handlePictureCardPreview"
      :on-change="handleChange"
      :on-remove="handleRemove">
      <i class="el-icon-plus"></i>
    </el-upload>
    <el-dialog :visible.sync="dialogVisible">
      <img width="100%" :src="dialogImageUrl" alt="">
    </el-dialog>
    <p v-show="fileList.length==0">支持图片拖入,一次最多上传100张,图片支持格式:jpg,png,bmp,gif,webp,tiff,svg,单张图片 < 10M</p>
</div>

</template>

<script>
import { getToken } from "@/utils/auth";
export default {
  props: {
    fileList: {
       type: Array,
    },
    // 图片类型
    picAccept: {
      type: String,
      default:''
    },
  },
  data () {
    return {
      headers: {
        Authorization: "Bearer " + getToken(),
      },
      dialogImageUrl: '',
      dialogVisible: false,
    }
  },
  methods: {
    handleChange (file, fileList) {
      //获取上传文件大小
      let imgSize = Number(file.size / 1024 / 1024);
        if (imgSize > 10) {
        this.$msgbox({
          title: "",
          message: "图片大小不能超过10MB,请重新上传。",
          type: "warning",
        });
        fileList.pop();   //新增的图片在最后一个,所以只要删除那个最后新增的>10M的图片就可以了
        return;
        }
      this.$emit('update:fileList', fileList)
     },
    handleRemove (file, fileList) {
      this.$emit('update:fileList', fileList)
    },
    handlePictureCardPreview (file) {
        this.dialogImageUrl = file.url;
        this.dialogVisible = true;
      },
  }
}
</script>

<style lang="scss" scoped>
.uploadDiv{
  width: 100%;
  height: 100%;
  p{
    color: #737780;
  }
  ::v-deep .el-upload--picture-card{
    width: 228px;
    height: 208px;
  }
  ::v-deep .el-upload-list--picture-card .el-upload-list__item{
    width: 228px;
    height: 208px;

  }
  ::v-deep .el-upload--picture-card i{
    line-height: 7;
  }
    ::v-deep .el-upload-dragger{
    width: 226px;
    height: 206px;
  }
}
</style>

父组件使用方法

//导入子组件
import PicUpload from '../../../../components/PicUpload'

//data 中定义要传的参数
data(){
      fileList: [],
      picAccept: '.jpg,.png,.bmp,.gif,.webp,.tiff,.svg',
}

//methods中定义方法

    // 开始检测
    async startcheck () {
      // 上传图片到服务器
      if (this.fileList.length === 0) {
        this.$message.warning('请选取文件')
        return
      }
      const formData = new FormData()
      this.fileList.forEach(file => {
        formData.append('file', file.raw)
      })
      let res = await submitUploadApi(formData)
    },
    
     //清空
    clearUpload () {
      this.fileList = []
    },

 

标签:el,封装,upload,fileList,file,上传,图片
From: https://www.cnblogs.com/guohanting/p/17269680.html

相关文章

  • Element.getBoundingClientRect()
    Element.getBoundingClientRect() 方法返回一个 DOMRect 对象,其提供了元素的大小及其相对于视口的位置。参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Elem......
  • 教育-selenium
    1.SeleniumSelenium是一个综合性项目,支持多种编程语言三大组件:IDE:浏览器插件,录制用例WebDriver:自动化用例执行(Python、Java、Ruby、C#)Grid:从单机变为分布式......
  • 对于使用element-ui中的日期时间选择器产生的json数据转换格式报错
    对于使用element-ui中的日期时间选择器产生的json数据转换格式报错报错如下所示JSONparseerror:Cannotdeserializevalueoftypejava.time.LocalDateTimefromStr......
  • Dell H730 write-through和write-back配置
    0x00 说明创建raid时,会要求选择writePolicy和readpolicy以及DiskcachepolicyWritePolicy1.write-though数据在写入存储的同时,要写入缓存,这种方式安全但是会牺......
  • Gametel让你手机变成带游戏手柄的游戏机
    随着智能手机处理能力的提升以及越来越多手机游戏的推出,越来越多的人开始使用手机来玩游戏了。手机利用触摸屏和重力感应等方式确实给了人们许多不一样游戏体验。但在游戏操......
  • Linux Shell脚本入门教程系列之(十六) Shell输入输出重定向
    本文是LinuxShell系列教程的第(十六)篇,更多LinuxShell教程请看:LinuxShell系列教程Shell中的输出和输入的重定向是在使用中经常用到的一个功能,非常实用,今天就为大家介绍下Sh......
  • Linux Shell脚本入门教程系列之(二)第一个shell脚本
    本文是LinuxShell脚本系列教程的第(二)篇,更多shell教程请看:LinuxShell脚本系列教程通过上一篇教程的学习,相信大家已经能够对shell建立起一个大体的印象了,接下来,我们通过一个......
  • 面向对象和面向过程(封装继承多态)
    面向对象&面向过程面向过程思想步骤清晰,第一步做什么第二步做什么面对过程适合处理一些简单的问题面向对象思想物以类聚,分类的思维模式对于描述复杂的事物,为了从......
  • 基于 Elasticsearch + kibana 实现 IP 地址分布地图可视化
    地址库在ELK中,我们可以使用地址库,来对IP进行分析,对日志进行分析,在ELKstack中只有Logstash可以做到,但是出图,是Kibana来出的,所以我们首先需要下载地址库数据文件,然后对Logstas......
  • 美国点评网站Yelp拟上市,估值20亿美元(视频)
    据知情人士透露,美国点评网站Yelp拟上市,最高估值为20亿美元。目前,该公司已聘请高盛集团和花旗集团作为该公司IPO(首次公开招股)上市的主承销商,计划......