• elementUI使用el-upload上传文件写法总结及避坑,上传图片/视频到本地/服务器以及回显+删除


    Element Upload 上传

    Element Upload官方文档:el-upload
    具体细节只看官方文档,本篇主要介绍避坑点和用法总结

    注意点以及坑

    • 本地上传想要回显图片视频,使用on-success是没办法再在上传后获取到本地文件路径后进行回显的,因为只有在上传的action成功,即不报错的情况下才会调用,本地上传用的action="#这个接口不存在,所以也不会上传成功,更不会调用获取到文件参数进行回显
      在这里插入图片描述

    • 如果想要先在本地进行回显,然后再上传的话,需要使用on-change钩子(还需:auto-upload ="false")获取文件本地路径,再生成一个formData传给后端上传文件的接口,
      本地回显用on-change,上传到服务器的回显用on-success

    • 官方文档中提供的上传图片接口https://jsonplaceholder.typicode.com/posts/现已无法使用
      在这里插入图片描述

    • 下面给大家总结几种常用的上传文件方法

    el-upload上传文件用法总结

    1. 上传单张图片到服务器并进行回显,不可删除只能替换

    这种上传单张图片的运行场景一般是上传头像,没有删除功能,只能进行替换

    <el-upload
      class="avatar-uploader"
      action="后端上传接口"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload">
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon">i>
    el-upload>
    
    <style>
     /deep/ .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        overflow: hidden;
      }
      .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
      }
      .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 178px;
        height: 178px;
        line-height: 178px;
        text-align: center;
      }
      .avatar {
        width: 178px;
        height: 178px;
        display: block;
      }
    style>
    
    <script>
      export default {
        data() {
          return {
            imageUrl: ''
          };
        },
        methods: {
          // 上传成功后的回显
          handleAvatarSuccess(res, file) {
            this.imageUrl = URL.createObjectURL(file.raw);
          },
          // 上传前对类型大小的验证
          beforeAvatarUpload(file) {
            const isJPG = file.type === 'image/jpeg';
            const isLt2M = file.size / 1024 / 1024 < 2;
    
            if (!isJPG) {
              this.$message.error('上传头像图片只能是 JPG 格式!');
            }
            if (!isLt2M) {
              this.$message.error('上传头像图片大小不能超过 2MB!');
            }
            return isJPG && isLt2M;
          }
        }
      }
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    2. 拖拽上传单张图片到本地回显再上传到服务器,可删除

    可以手动上传,也可以拖拽上传,图片可以在没有后端上传接口时进行回显,可删除
    template:

    <el-upload
              drag
              action="#"
              :show-file-list="false"
              :auto-upload="false"
              :on-change="uploadFile"
              accept="image/jpg,image/jpeg,image/png"
            >
              <i
                v-if="imageUrl1"
                class="el-icon-circle-close deleteImg"
                @click.stop="handleRemove1"
              >i>
              <img v-if="imageUrl1" :src="imageUrl1" class="avatar" />
    
              <div v-else>
                <i
                  class="el-icon-picture"
                  style="margin-top: 40px; font-size: 40px; color: #999a9c"
                >i>
                <div class="el-upload__text1">上传图片div>
                <div class="el-upload__text">* 建议尺寸比例2.2:1,不超过4m,div>
                <div class="el-upload__text">格式为png、jpeg或jpgdiv>
              div>
            el-upload>
    <style scoped>
    .deleteImg {
      font-size: 30px;
      position: absolute;
      top: 0;
      right: 0;
      z-index: 999;
    }
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    data:

     data() {
          return {
            imageUrl1: ''
          };
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5

    method:

     uploadFile(item) {
          console.log(item);
    
          let formData = new FormData();
          let file = item.raw;
          this.imageUrl1 = URL.createObjectURL(file);
          formData.append("file", file);
          // 传formData给后台就行
          // 比如
          // 接口(formData).then(res=>{
              // this.videoUrl=res.url
          // })
        },
        // 删除只需清空imageUrl1即可
       handleRemove1(file, fileList) {
          // console.log(file, fileList);
          this.imageUrl1 = "";
        },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    在这里插入图片描述

    3. 多图上传到服务器,可回显预览删除

    list-type="picture-card"hover会自动有预览删除菜单,不需自己写样式,绑定事件即可

    <el-upload
      action="后端接口地址"
      list-type="picture-card"
      :on-preview="handlePictureCardPreview"
      :on-remove="handleRemove">
      <i class="el-icon-plus">i>
    el-upload>
    <el-dialog :visible.sync="dialogVisible">
      <img width="100%" :src="dialogImageUrl" alt="">
    el-dialog>
    <script>
      export default {
        data() {
          return {
            dialogImageUrl: '',
            dialogVisible: false
          };
        },
        methods: {
          handleRemove(file, fileList) {
            console.log(file, fileList);
          },
          handlePictureCardPreview(file) {
            this.dialogImageUrl = file.url;
            this.dialogVisible = true;
          }
        }
      }
    script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
  • 相关阅读:
    Greenplum数据库源码分析——Standby Master操作工具分析
    分支与循环(2)
    Nacos面试题
    哲寻面试(部分)(未完全解析)
    Hazelcast系列(八):数据结构
    vue3 + elementplus Cannot read properties of null (reading ‘isCE‘)
    RHCE之HTTP搭建
    智头条 | 四部门:2025年建立500家智能家居体验中心,小米发布人形仿生机器人,2022光亚展智能成主角
    《回炉重造》——注解
    java:Java中的函数和函数重载
  • 原文地址:https://blog.csdn.net/qq_23073811/article/details/126216368