elementui中el-upload上传文件转base64格式
<el-upload class="upload-demo" ref="upload" action="" :on-change="httprequest" :on-remove="httprequest" :file-list="filelist" :auto-upload="false"> <el-button slot="trigger" size="small" type="primary">选取文件</el-button> </el-upload>
data() { return { filelist: [], uploadfile: [] } }, methods: { async httprequest(file, filelist) { this.uploadfile = [] for (let i in filelist) { this.uploadfile[i] = await this.getbase64(filelist[i].raw) } console.log('上传文件列表', this.uploadfile) }, // 转base64码 getbase64(file) { return new promise((resolve, reject) => { const reader = new filereader() let fileresult = '' reader.readasdataurl(file) // 开始转 reader.onload = () => { fileresult = reader.result } // 转 失败 reader.onerror = error => { reject(error) } // 转 结束 reader.onloadend = () => { resolve(fileresult) } }) },
el-upload 组件上传图片多张 转换为base64
根据后台的需求,需要把图片处理为base64传给他,直接上代码。
图片显示正常
<el-upload ref="upload1" action="" list-type="picture-card" multiple :http-request="beforeavatarupload" :limit="limit" :on-exceed="onexceed" :on-remove="onremove" > <i class="el-icon-plus"></i> </el-upload> // 自定义上传方法 处理图片转化为base64 beforeavatarupload(file){ const self = this; let reader = new filereader(); reader.readasdataurl(file.file); reader.onload = function (e) { let img_base64 = e.target.result.split(",")[1]; // 自定义数组对象,传给后台的数据 self.imgbase64array.push({ base64str: img_base64 }); } }, // 限制提示 onexceed() { this.$message({ message: "最多上传6张图片", type: "warning", }); }, onremove(file, filelist) {}, // 提交代码 onsubmit(){ // 判断 1无照片到有照片 2 有照片 但未新增 页面进行删除 3 在原有基础上进行新增照片(也包括原有基础删除但未删除全部,再新增) var that=this if (this.imgbase64array.length > 0 && this.form.imgs.length == 0) { this.form.imgs = this.imgbase64array; console.log("1无照片到有照片", this.form.imgs); } else if ( this.imgbase64array.length == 0 && this.form.imgs.length > 0 ) { this.form.imgs = this.form.imgs; console.log("2 有照片 但未新增 页面进行删除", this.form.imgs); } else if ( this.imgbase64array.length > 0 && this.form.imgs.length > 0 ) { this.form.imgs = [...this.imgbase64array, ...this.form.imgs]; console.log("3 在原有基础上进行新增照片", this.form.imgs); }else if ( this.imgbase64array.length == 0 && this.form.imgs.length == 0 ) { this.form.imgs = []; console.log("4 在原有基础上进行删除照片 未新增", this.form.imgs); } // console.log(that.form.imgs) var res = await geschoolupdatedetail(that.form); console.log(res); if (res.flag === 1) { that.$message.success("修改成功"); // 清空图片 this.$refs.upload1.clearfiles(); } },
图片显示如上,在线地址显示有点问题找后台重新对啦(这个大家就不要太在意)
上传成功以后后台返回url页面
显示代码如下:
<div class="imgs" v-if="form.imgs && form.imgs.length > 0"> <div v-for="(img, index) in form.imgs" :key="index"> <img :src="img.url" alt="" /> <el-button class="delbutton" type="danger" size="small" @click="deleteimg(img.id)">删 除</el-button> </div> </div> // 删除图片 deleteimg(id) { var index; var arr = this.form.imgs; arr.map((item, i) => { if (item.id == id) { index = i; arr.splice(index, 1); } }); this.form.imgs = arr; },
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论