vue +elementui 项目中表单提交 同时上传图片,转为base64格式传给后端

本文主要是介绍vue +elementui 项目中表单提交 同时上传图片,转为base64格式传给后端,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.新增应用时时一个form 表单,其中一个是用户上传应用图标。
在这里插入图片描述
2.要求传给后端时以base64格式,需要前端转换。在上传时的chaneg事件里转,完整代码如下

<template><j-page><div slot="content"><!-- <el-button type="text" icon="el-icon-back">返回</el-button> --><el-button :loading="btnLoading" type="primary" @click="saveInfo">保存</el-button></div><el-card><el-form ref="appForm" :model="appForm" :rules="appRules"><el-form-item label="应用名称" prop="name"><el-input v-model="appForm.name" placeholder="请输入应用名称" /></el-form-item><el-form-item label="应用标识" prop="key"><el-input v-model="appForm.key" placeholder="请输入应用标识" /></el-form-item><el-form-item label="应用描述" prop="description"><el-input v-model="appForm.description" placeholder="请输入应用描述" style="width:100%" /></el-form-item><el-form-item label="应用类型" prop="type"><el-select v-model="appForm.type" placeholder="请选择应用类型" style="width:100%"><el-option label="默认应用" value="0" /><el-option label="接入应用" value="1" /></el-select></el-form-item><el-form-item label="应用状态" prop="state"><el-select v-model="appForm.state" placeholder="请选择应用状态" style="width:100%"><el-option label="可用" value="0" /><el-option label="不可用" value="1" /></el-select></el-form-item><el-form-item label="是否启动" prop="status"><el-radio-group v-model="appForm.status"><el-radio label="0"></el-radio><el-radio label="1"></el-radio></el-radio-group></el-form-item><el-form-item label="分组" prop="group"><el-select v-model="appForm.group" placeholder="请选择分组" style="width:100%"><el-optionv-for="item in groupList":key="item.id":label="item.name":value="item.id"/></el-select></el-form-item><el-form-item label="失效日期" prop="invalidDate"><el-date-picker v-model="appForm.invalidDate" type="datetime" placeholder="选择日期" /></el-form-item><el-form-item label="应用访问根路径" prop="url"><el-input v-model="appForm.url" placeholder="请输入应用访问根路径" /></el-form-item><el-form-item label="应用访首页路由" prop="homeUrl"><el-input v-model="appForm.homeUrl" placeholder="请输入应用访首页路由" /></el-form-item><el-form-item label="关键字" prop="keyWords"><el-input v-model="appForm.keyWords" placeholder="请输入应用关键字" /></el-form-item><el-form-item label="应用图标" prop="image"><el-uploadclass="upload-img":style="{backgroundImage:'url(' + appForm.image + ')', backgroundRepeat:'no-repeat', backgroundPosition:'center center', backgroundSize: 'contain'}"action::limit="1":show-file-list="false":on-change="handleChange":before-upload="beforeUpload"accept="image/png, image/gif, image/jpg, image/jpeg"><i v-show="!appForm.image" class="el-icon-upload avatar-uploader-icon" /><div v-show="!appForm.image" slot="tip" class="el-upload__text upload__tip">上传照片</div></el-upload></el-form-item></el-form></el-card></j-page>
</template><script>
import { apiBaseAppAdd, apiBaseAppUpdate } from "@/api/application/application";
import moment from "moment";import { apiBaseGetDic } from "@/api/dictionary/dictionary";export default {props: {visible: {type: Boolean,default: true,},ip: {type: String,default: null,},dicTitle: {default: undefined,type: String,},data: {type: Object,default: () => undefined,},},data() {return {btnLoading: false,appForm: {image: undefined,type: "0",state: "0",status: "0",},appRules: {name: [{ required: true, message: "请输入名称", trigger: "blur" }],key: [{ required: true, message: "请输入key", trigger: "blur" }],image: [{ required: true, message: "请选择图片", trigger: "blur" }],},groupList: [],};},mounted() {this.getDic();},methods: {onClose() {this.$emit("update:visible", false);// console.log(this.$refs.appForm);// if (!this.data) {this.$refs.appForm.resetFields();// }// if (this.data) this.appForm = this.data;// this.appForm.imageUrl = "";},async getDic() {const { data, success, message } = await apiBaseGetDic();if (!success) {this.$message.warning(message);return;}this.groupList = data;},async saveInfo() {try {await this.$refs.appForm.validate();} catch (error) {return;}this.btnLoading = true;const { success, message } = await apiBaseAppUpdate(this.appForm);if (!success) {this.$message.warning(message);return;}this.btnLoading = false;this.$message.success(message);this.$router.go(-1);},handleChange(file, fileList) {const isLt2M = file.size / 1024 / 1024 < 2;if (isLt2M) {// uploadImgToBase64()返回一个Promise对象,通过.then()获取其数据。其中data.result是图片转成的base64值this.uploadImgToBase64(file.raw).then((data) => {this.appForm.image = data.result;});} else {this.$message.error("上传图片大小不能超过 2MB!");}},uploadImgToBase64(file) {// 核心方法,将图片转成base64字符串形式return new Promise((resolve, reject) => {const reader = new FileReader();reader.readAsDataURL(file);reader.onload = function () {// 图片转base64完成后返回reader对象resolve(reader);};reader.onerror = reject;});},beforeUpload(file) {return false;},},
};
</script><style lang="scss" scoped>
input[type="file"] {display: none;
}.avatar-uploader /deep/ .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;
}
.avatar-uploader /deep/ .el-upload:hover {border-color: #409eff;
}
.avatar-uploader-icon {font-size: 36px;color: #8c939d;width: 120px;height: 120px;line-height: 120px;text-align: center;
}
.avatar {width: 120px;height: 120px;display: block;
}
.add-keyperson-dialog .upload-img:hover {border-color: #409eff;color: #409eff;
}
.el-dialog__body {height: 400px;overflow-y: auto;overflow-x: hidden;
}/deep/ .el-form {width: 50%;margin: auto;
}
/deep/ .el-date-editor.el-input,
.el-date-editor.el-input__inner {width: 100%;
}
</style>

3.上传成功后端返回数据如下
在这里插入图片描述
4.前端展示只需要这样写
在这里插入图片描述

这篇关于vue +elementui 项目中表单提交 同时上传图片,转为base64格式传给后端的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980655

相关文章

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

Java文件上传的多种实现方式

《Java文件上传的多种实现方式》文章主要介绍了文件上传接收接口的使用方法,包括获取文件信息、创建文件夹、保存文件到本地的两种方法,以及如何使用Postman进行接口调用... 目录Java文件上传的多方式1.文件上传接收文件接口2.接口主要内容部分3.postman接口调用总结Java文件上传的多方式1