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

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框