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

相关文章

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使