基于vue+springboot,实现图片base64转码保存到数据库

基于vue+springboot,实现图片base64转码保存到数据库

背景:在项目中遇到一个新增、编辑的场景。新增一个车辆信息,并且附有车辆照片和关联的设备照片,照片转码成base64保存到mysql数据库。前端使用的是elementUi的upload组件,在前端把图片转成base64再传到后端

前端代码如下

			<el-upload
              ref="carUpload"
              :action="doUpload"
              :file-list="carPictureList"
              list-type="picture-card"
              :limit=limitNum
              :auto-upload="true"
              :on-change="changeCarPicture"
              :on-exceed="handleExceed"
              :before-upload="beforeUpload">
              <i class="el-icon-plus"></i>
            </el-upload>
  • ref :给这个组件加个id,可通过 this.$refs.carUpload 访问这个组件对象
  • action :必选参数,上传的地址,通过这个地址上传的文件类型为MultipartFile,而我需要的是base64的一串字符串。所以我这里的处理方式是随意给个接口地址,下面会给出接口代码
  • file-list :上传的文件列表,一个对象数组,类似[{name:‘xxx’,url:‘xxxx’}]
  • list-type :文件列表的类型,有text/picture/picture-card,可根据需求选择对应的类型
  • limit :最大允许上传个数
  • auto-upload :是否在选取文件后立即进行上传,这个是会上传到你action的指定接口的
  • on-change :文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用,在这里可以把图片转成base64
  • on-exceed :文件超出个数限制时的钩子
  • before-upload :上传文件之前的钩子,参数为上传的文件,我是在这加了文件类型的限制

直接上代码:

	data(){
		return{
			doUpload: this.$http.adornUrl('/sys/dept/upload'),
			carPictureList:[],
			limitNum: 1,
			carPicture:'' //定义一个值来接收base64的字符串 
		}
	},
	methods:{
		changeCarPicture(file, fileList) {
       	   // 图片转成base64上传
        	let reader = new FileReader();
        	reader.onload = () => {
          	 	let _base64 = reader.result;
          		let BASE64 = _base64.split(",");
         		this.carPicture = BASE64[1];  //赋值
       	    };
          reader.readAsDataURL(file.raw);
        },
        handleExceed(files, fileList) {
        	//这个是文件超出个数限制时,给出提示
        	this.$notify.warning({
          	  title: '警告',
          	  message: '图片只能上传一张'
       		})
      	},
      	beforeUpload(file){
      		//添加文件类型的限制
       	 	let types = ['image/jpeg', 'image/jpg', 'image/png'];
        	const isImage = types.includes(file.type);
        	if (!isImage) {
          		this.$message.error('上传图片只能是 JPG、JPEG、PNG 格式!');
          		return false;
        	}
     	},
	}

给大家看一下action绑定的doUpload: this.$http.adornUrl(’/sys/dept/upload’),这个接口

/**
     * 上传文件
     */
    @PostMapping("/upload")
    public R upload(@RequestParam("file") MultipartFile file) throws Exception {
        //上传文件
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        byte[] data = file.getBytes();

        return R.ok().put("data", data);
    }

保证这个接口能用就行。

剩下的就很简单了,图片已经转成base64字符串保存在carPicture了,把这个字符串传到后台进行保存就行了。要传其他照片也是一样,多写一个upload,转成base64,换一个值保存,对于后端接口来说,它就是一个String类型的数据。
顺带提一下,mysql保存base64是用longblob字段类型,在你保存这种数据时,可能会因为数据量过大而报错,可以上网查看相应的解决办法,增加max_allowed_packet。

接下来来说一下图片回显
很简单!
首先,根据你的接口查询到相应得数据,然后

		let carMap = {};
        carMap["name"] = '车辆照片';
        carMap["url"] = "data:image/png;base64," + carPicture;
        this.carPictureList.push(carMap);

carPicture 为你后端查询的图片base64字符串
carPictureList是你绑定在upload上的那个文件列表
这样你的图片就能回显在页面上了。

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
宿舍管理系统是一个比较综合的系统,需要涉及到前端、后端、数据库等多个方面。下面是一个基于VueSpringboot的宿舍管理系统的搭建步骤: 1. 环境搭建 首先需要安装好Node.js和Java开发环境,以及MySQL数据库。 2. 前端搭建 使用Vue-cli创建一个Vue项目,安装Vue-router和Axios等必要的依赖。在src目录下创建components、views、router、store等文件夹,分别存放组件、页面、路由和状态管理相关文件。 3. 后端搭建 使用Spring Initializr创建一个Springboot项目,选择必要的依赖,如Spring Web、Spring Data JPA、MySQL Driver等。在src目录下创建entity、repository、service、controller等文件夹,分别存放实体类、数据访问层、服务层和控制层相关文件。 4. 数据库设计 根据宿舍管理系统的需求,设计数据库表结构,如宿舍楼信息表、宿舍信息表、学生信息表等。 5. 前后端交互 使用Axios在前端与后端进行数据交互,使用Vue-router实现页面跳转。 6. 前端界面设计 根据需求设计前端页面,如登录页面、宿舍楼信息管理页面、宿舍信息管理页面、学生信息管理页面等。 7. 后端接口设计 设计后端接口,如登录接口、宿舍楼信息管理接口、宿舍信息管理接口、学生信息管理接口等。使用@RestController注解实现控制层,使用@Service注解实现服务层,使用@Repository注解实现数据访问层。 8. 系统测试 完成前后端搭建后,进行系统测试,测试系统的功能是否正常。 以上是一个基于VueSpringboot的宿舍管理系统的搭建步骤,具体实现还需根据需求进行具体开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值