1、实现的效果

2、Vue前端

      <!--    ==================================增加汽车==========================================-->
<el-dialog
title="添加汽车"
:visible.sync="adddialogVisible"
width="30%"
:close-on-click-modal="false">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" style="width: 60%" label-width="100px" class="demo-ruleForm"> <el-form-item label="汽车押金" prop="guarantee_money">
<el-input v-model="ruleForm.guarantee_money" placeholder="请输入汽车押金"></el-input>
</el-form-item> <el-form-item label="上传图片" prop="imageUrl">
<el-upload
class="avatar-uploader"
action="http://localhost:8282/upload/img"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="imageUrl!=''" :src="data:imageUrl" class="avatar">
<i v-else class="el-icon-plus avatar-uploader-icon">上传图片</i>
</el-upload>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="resetForm('ruleForm')">重置</el-button>
<el-button @click="adddialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitForm('ruleForm')">确 定</el-button>
</span>
</el-dialog>

3、图片上传

重点部分:==

4、字段变量根据自己的字段名自行设置(这里不给出了,哈哈哈)

5、method方法

5.1、图片显示在选择框中,同时返回后端存储的地址

      //图片回显
handleAvatarSuccess(res, file) {
console.log(res)
this.imageUrl = res.data.final_fileName
sessionStorage.setItem("imgUrl",this.imageUrl)
alert(this.imageUrl)
},
//图片上传大小限制
beforeAvatarUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isLt2M) {
this.$message.error('上传头像图片大小不能超过 2MB!');
}
return isLt2M;
},

解释:

5.2查看后端返回给前端的图片地址

5.3 提交表单数据到后端

      //提交表单
submitForm() {
let _this = this;
_this.ruleForm.imageUrl =sessionStorage.getItem("imgUrl")
axios.post('/car/addcar',this.ruleForm).then(resp => {
if(resp.data.code==200){
_this.$alert('《'+_this.ruleForm.name+'》添加成功', '消息', {
confirmButtonText: '确定',
callback: action => {
_this.adddialogVisible=false
_this.showAllUsers();
}
});
}
});
},

6、后端的配置

6.1、处理前端传输过来的图片、将图片地址返回给前端


@Value("${pictureFile.path}")
private String picturePath; @Value("${pictureFile.path-mapping}")
private String picturePath_mapping;
//这个写在了配置文件中 @PostMapping("/upload/img")
public Result upload(MultipartFile file) {
String fileName = file.getOriginalFilename(); // 文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后缀名
fileName = UUIDutilsu.getUUID() + suffixName; // 新文件名
File dest = new File(picturePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
String final_fileName = "http://localhost:8282" + picturePath_mapping + fileName;
System.out.println(final_fileName);
return Result.ok().data("final_fileName",final_fileName);
}

讲解:UUIDutilsu.getUUID()是我写的一个UUID的工具类。Result.ok().data("final_fileName",final_fileName);是统一返回给前端的数据格式。如上图所示。Result是我封装好的统一返回给前端数据的字段。这里可以直接返回String类型的字符串

6.2、application.yml文件中

pictureFile:
path: "G:/BISHE/upload/"
path-mapping: "/myImg/" resources:
static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:${pictureFile.path-mapping}

6.3、这个重点配置

@Configuration
public class URLConfig implements WebMvcConfigurer {
@org.springframework.beans.factory.annotation.Value("${pictureFile.path}")
private String picturePath; @Value("${pictureFile.path-mapping}")
private String picturePath_mapping; @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(picturePath_mapping+"**").addResourceLocations("file:"+picturePath); } }

7、添加商品的接口(使用了swagger)

    @ApiOperation(value = "添加汽车", notes = "添加汽车")
@ApiImplicitParams({
@ApiImplicitParam(name = "Car")
})
@RequestMapping(value = "/car/addcar", method = RequestMethod.POST)
public Result addCar(@RequestBody Car car) {
car.setStatus(1);//新增加的商品默认是上架商品
String date = CurrentTime.getCurrentTime();
car.setDate(date);
int rs = carService.addCar(car);
if (rs > 0) {
return Result.ok();
} else {
throw new BusinessException(ResultCode.ADD_CAR_ERROR.getCode(),
ResultCode.ADD_CAR_ERROR.getMessage());
} }

Springboot+Vue实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面的更多相关文章

  1. layui 图片与表单一起提交 + layer.photos图片层预览

    HTML基本结构: <form class="layui-form" action="" id="feedBackForm"> ...

  2. el-upload上传文件和表单一起提交+后端接收代码

    目录 一.前言 二.前端页面展示 三.表单代码 四.Data部分 五.JS方法 六.后端接收方式 七.总结 一.前言 我们在做前端时,会遇到这样的需求,上传Excel文件,并且还要和填写的表单数据,一 ...

  3. springboot——重定向解决刷新浏览器造成表单重复提交的问题(超详细)

    原因:造成表单重复提交的原因是当我们刷新浏览器的时候,浏览器会发送上一次提交的请求.由于上一次提交的请求方式为post,刷新浏览器就会重新发送这个post请求,造成表单重复提交. 解决办法: 将请求当 ...

  4. django websocket 实现后台日志在web端展示(+前端vue设置)

    核心代码: @accept_websocket def get_log(req): if req.is_websocket(): print('收到websocket请求') with open(se ...

  5. puzz: 图片和表单上传的不一致问题

    1.    方向1 用户提交表单, 图片和表单同步上传.(由同一服务器处理, 服务器压力大. 没有分离) 2.    方向2 图片和表单分开上传. 如图片访问ftp,表单提交后台(图片和后台分离) 2 ...

  6. Token防止表单重复提交和CSRF攻击

    Token,可以翻译成标记!最大的特点就是随机性,不可预测,一般黑客或软件无法猜测出来. Token一般用在两个地方: 1: 防止表单重复提交 2: anti csrf攻击(Cross-site re ...

  7. java web解决表单重复提交问题

    我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题.今天就来给总结如何解决表单提交问题,欢迎大家交流指正. 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提 ...

  8. java web解决表单重复提交

    首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提交?2.什么情况下会出现表单重复提交?3.什么情况需要避免表单重复提交? 什么叫表单提交问题,说白了,就是同一份信息,重 ...

  9. MVC下form表单一次上传多种类型的图片(每种类型的图片可以上传多张)

    form表单一次上传多种类型的图片(每种类型的图片可以上传多张) controller中的action方法 public ActionResult UploadImage( )        { in ...

随机推荐

  1. 基于ABP和Magicodes实现Excel导出操作

      前端使用的vue-element-admin框架,后端使用ABP框架,Excel导出使用的Magicodes.IE.Excel.Abp库.Excel导入和导出操作几乎一样,不再介绍.文本主要介绍E ...

  2. MySQL之JDBC编程增删改查

    MySQL之JDBC 一.JDBC是什么 Java DatabaseConnectivity (java语言连接数据库) 二.JDBC的本质 JDBC是SUN公司制定的一套接口(interface). ...

  3. Debezium的基本使用(以MySQL为例)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. GreatSQL是MySQL的国产分支版本,使用上与MySQL一致. 一.Debezium介绍 摘自官网: Debeziu ...

  4. virtio 驱动的数据结构理解

    ps:本文基于4.19.204内核 Q:vqueue的结构成员解释: A:结构如下,解析附后: struct virtqueue { struct list_head list;//caq:一个vir ...

  5. 使用Python的selenium库制作脚本,支持后台运行

    本文介绍如何使用Python的selenium库制作脚本.概念:       Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...

  6. 修改窗体的Title

    直接上代码 /// <summary> /// 获取窗体的名称 /// </summary> /// <param name="hWnd">&l ...

  7. Java开发学习(二十八)----拦截器(Interceptor)详细解析

    一.拦截器概念 讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器 (2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源 (3)如 ...

  8. Linux之firewalld防火墙规则

    一, 什么是防火墙规则? 允许哪些服务端口被放行,怎么放行,及哪些服务端口被阻拦,如何阻拦的一组网络安全规则.支持ipv4和ipv6,且分为直接规则和富规则两种. 二, 如何管理firewalld 1 ...

  9. JS输出内容为[object Object]

    问题描述 项目中,欲在控制台输出变量res(自定义对象)查看数据,代码为: console.log('res:' + res); 但控制台显示结果为res: [object Object],并非想要查 ...

  10. 【问题解决】Debian更新源提示InRelease已过期

    问题 本人日常用 Debian10 今天在更新源(apt update) 时,出现InRelease文件过期的问题 E: http://mirrors.163.com/debian/dists/bus ...