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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论