vue el-upload手动上传实现过程

 更新时间:2024年06月12日 16:14:55   作者:不想996了的小姑娘  
这篇文章主要介绍了vue el-upload手动上传实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue el-upload手动上传

        ```vue
        <el-upload v-model="xlsFile" ref="fileUpload" :limit="1" accept=".xls, .xlsx" action="#" :multiple="false"
          :auto-upload="false" :before-upload="beforeFileUpload" :on-preview="preview" :on-change="fileChange"
          :http-request="uploadHttpRequest" :on-exceed="exceed" :on-remove="fileRemove" :on-success="fileSuccess">
          <el-button size="small" type="primary">
            导入文件
            <i class="el-icon-upload el-icon--right"></i>
          </el-button>
          <div class="el-upload__tip" style="color: rgba(255, 255, 255, 0.65)" slot="tip">
            提示:仅允许上传多1个".xlsx"或者".xls"格式文件,单个文件最大10M
          </div>
        </el-upload>
         <el-button type="primary" @click="submitUpload()">上传</el-button>
 script部分
```vue
                          // 试题导入
beforeFileUpload(file) {
 const isFileSizeLimit = file.size / 1024 / 1024 < 10;
 if (!isFileSizeLimit) {
   this.$message.error("单个图片大小不能超过 10MB!");
 }
 return isFileSizeLimit;
},
// 文件添加、 上传、 失败
fileChange(file, fileList) {
 this.xlsFile = file;
 console.log("1111111", this.xlsFile);
},
// 文件上传成功处理
fileSuccess(response, file, fileList) {
 // this.openUpload = false;
 // this.isUploading = false;
},
// 预览文件
preview(file) {
 // this.dialogVisible = true;
},
// 文件超出限制
exceed(files, fileList) {
 this.$message.warning(
   `当前限制选择 1个文件,本次选择了 ${files.length} 个文件,共选择了 ${
     files.length + fileList.length
   } 个文件`
 );
},
// 移除文件
fileRemove(file, fileList) {
 this.xlsFile = null;
},
// 点击上传
submitUpload() {
 this.$refs.fileUpload.submit();
},
uploadHttpRequest(param) {
 const formData = new FormData(); //FormData对象,添加参数只能通过append('key', value)的形式添加
 formData.append("file", this.xlsFile.raw); //添加文件对象
 // this.$refs["form"].validate((valid) => {
   // if (valid) {
   //   if (!this.form.id) {
   //     formData.append("passValue", this.form.passValue);
   //     formData.append("scoreEvery", this.form.scoreEvery);
   //     formData.append("testName", this.form.testName);
   //   } else {
   //     formData.append("id", this.form.id);
   //   }
     excelData(formData)
       .then((res) => {
         if (res.code === 200) {
           this.msgSuccess("导入成功");
           console.log('re====>',res.data)
           // this.open = false;
           this.getList();
         }
       })
       .catch((err) => {
         console.log("失败", err);
         param.onError(); //上传失败的文件会从文件列表中删除
       });
   // }
 // });
},

把el-upload里的自动上传auto-upload置为false,然后自定义上传按钮,调用

this.$refs.fileUpload.submit();

便会触发 :

http-request=“uploadHttpRequest”

vue在表单中使用el-upload手动上传图片

自动上传和手动上传

上传图片分两种,自动上传和手动上传,效果区别:

  • 自动上传:选择图片后立刻调接口上传图片
  • 手动上传:选择图片后只显示图片,自定义何时上传,可以定义点击确定事件里表单验证成功后上传图片
  • 区别:自动上传会造成很多脏数据,手动上传等到上传时才校验图片是否合规

手动上传

表单中使用el-upload手动上传图片,组件选择的是照片墙

<template>
    <el-form
      ref="cardFormRef"
      :model="cardForm"
      :rules="rules"
      label-width="120px"
      class="demo-cardForm"
      status-icon
    >
    <el-form-item label="轮播图" prop="photo">
        <el-upload
          ref="uploadRef"
          :class="{ iconVis: fileList.length }"
          :action="url" //上传接口
          v-model:file-list="fileList"
          :limit="1" //限制上传一张
          list-type="picture-card"  //照片墙
          :before-upload="beforeUpload"  //上传前
          :on-success="handleAvatarSuccess"  //上传成功
          :headers="headers"
          :auto-upload="false"  //手动上传
        >
          <el-icon class="avatar-uploader-icon"><Plus /></el-icon>
        </el-upload>
      </el-form-item>
  </el-form>
</template>
var fileList = ref([]);
var uploadUrl = ref(false); //存图片成功返回的url
const headers = ref({ Authorization: "Bearer " + getToken() });
var url =import.meta.env.VITE_APP_BASE_API + "接口";
 
var rules = computed(() => ({  //表单校验规则
  photo: [
    {
      required: true,
      message: "请上传图片",
      trigger: "blur",
    },
  ]
}));
 
var beforeUpload = (file) => {
  console.log("上传前");
  const isJPG =
    file.type === "image/jpeg" ||
    file.type === "image/png" ||
    file.type === "image/jpg";
  const isLt2M = file.size / 1024 / 1024 < 2;
  if (!isJPG) {
    proxy.$modal.msgError("上传图片只能是 JPG/PNG 格式!");
  }
  if (!isLt2M) {
    proxy.$modal.msgError("上传图片大小不能超过 2MB!");
  }
  isJPG && isLt2M ? (uploadUrl.value = true) : (uploadUrl.value = false);
  return isJPG && isLt2M;
};
 
function handleAvatarSuccess(res, file) {
  console.log("成功了!");
  let { url } = res.data;
  uploadUrl.value = url;
  sumbitForm(); //表单提交接口,传uploadUrl
}
 
var cardFormRef=ref(null);
var uploadRef=ref(null);
var sumbit = () => {  //点击确定按钮,进行表单校验,校验成功上传图片
  cardFormRef.value.validate((val) => {
    if (val) {
      console.log("上传图片");
     uploadRef.value.submit();
    }
  });
};

点击确定sumbit,表单校验成功 => beforeUpload检查图片符合规格 => handleAvatarSuccess图片上传成功 =>sumbitForm提交表单,包含图片上传成功返回的url

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue+flask实现视频合成功能(拖拽上传)

    vue+flask实现视频合成功能(拖拽上传)

    这篇文章主要介绍了vue+flask实现视频合成功能(拖拽上传),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#<Object>‘的解决方法

    Vue报错:Uncaught TypeError: Cannot assign to read only propert

    这篇文章主要给大家介绍了关于Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>' 的解决方法,文中介绍的非常详细,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 基于Vue2实现歌曲播放和歌词滚动效果

    基于Vue2实现歌曲播放和歌词滚动效果

    这篇文章主要介绍了如何基于Vue2实现歌曲播放和歌词滚动效果,文中通过代码示例和图文讲解的非常详细,对大家的学习或工作有一定的帮助,感兴趣的小伙伴可以自己动手试一下
    2024-09-09
  • vue v-on传递参数和事件修饰符的使用

    vue v-on传递参数和事件修饰符的使用

    本文主要介绍了vue v-on传递参数和事件修饰符的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • 关于vue中hash和history的区别与使用图文详解

    关于vue中hash和history的区别与使用图文详解

    vue-router中有hash模式和history模式,下面这篇文章主要给大家介绍了关于vue中hash和history的区别与使用的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • Vue filter介绍及详细使用

    Vue filter介绍及详细使用

    这篇文章主要介绍了Vue filter介绍及详细使用,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • Vue.js学习笔记之常用模板语法详解

    Vue.js学习笔记之常用模板语法详解

    本篇文章主要介绍了Vue.js学习笔记之常用模板语法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • vue项目中如何将数据导出为word文档

    vue项目中如何将数据导出为word文档

    这篇文章主要介绍了vue项目中如何将数据导出为word文档问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • VNode虚拟节点实例简析

    VNode虚拟节点实例简析

    这篇文章主要介绍了VNode虚拟节点,结合实例形式分析了VNode虚拟节点的基本功能、原理与实现方法,需要的朋友可以参考下
    2023-06-06
  • 解决vue下载后台传过来的乱码流的问题

    解决vue下载后台传过来的乱码流的问题

    这篇文章主要介绍了解决vue下载后台传过来的乱码流的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论