使用ElementUI中el-upload上传文件转base64格式

 更新时间:2024年05月24日 11:24:03   作者:数学分析分析什么?  
这篇文章主要介绍了使用ElementUI中el-upload上传文件转base64格式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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;
},

总结

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

相关文章

  • vue中slot(插槽)的介绍与使用

    vue中slot(插槽)的介绍与使用

    这篇文章主要给大家介绍了关于vue中slot(插槽)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用vue具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Vue CLI中模式与环境变量的深入详解

    Vue CLI中模式与环境变量的深入详解

    模式是 Vue CLI 项目中一个重要的概念,下面这篇文章主要给大家介绍了关于Vue CLI中模式与环境变量的相关资料,需要的朋友可以参考下
    2021-05-05
  • 在vue里如何使用pug模板引擎

    在vue里如何使用pug模板引擎

    这篇文章主要介绍了在vue里如何使用pug模板引擎,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vite结合electron构建前端桌面应用程序

    vite结合electron构建前端桌面应用程序

    本文主要介绍了vite结合electron构建前端桌面应用程序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • vue中使用props传值的方法

    vue中使用props传值的方法

    这篇文章主要介绍了vue中使用props传值的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • vue动态生成新表单并且添加验证校验规则方式

    vue动态生成新表单并且添加验证校验规则方式

    这篇文章主要介绍了vue动态生成新表单并且添加验证校验规则方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Vue+webpack项目基础配置教程

    Vue+webpack项目基础配置教程

    这篇文章主要介绍了Vue+webpack项目基础配置教程,需要的朋友可以参考下
    2018-02-02
  • elementPlus 的el-select在提示框关闭时自动弹出的问题解决

    elementPlus 的el-select在提示框关闭时自动弹出的问题解决

    这篇文章主要介绍了elementPlus 的el-select在提示框关闭时自动弹出闭时自动弹出的问题,主要问题就是因为filterable属性,根本解决方案是选中的时候让他失去焦点 el-select有一个visible-change事件,下拉框出现/隐藏时触发,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • 详解使用jest对vue项目进行单元测试

    详解使用jest对vue项目进行单元测试

    这篇文章主要介绍了详解使用jest对vue项目进行单元测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Vue如何实现文件预览和下载功能的前端上传组件

    Vue如何实现文件预览和下载功能的前端上传组件

    在Vue.js项目中,使用ElementUI的el-upload组件可以轻松实现文件上传功能,通过配置组件参数和实现相应的方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09

最新评论