利用Springboot+vue实现图片上传至数据库并显示的全过程

 更新时间:2023年04月12日 09:59:12   作者:是阿覃呀!  
最近遇到个需求,需要将图片在前端上传到服务器进行保存,然后读取到前端进行展示,这篇文章主要给大家介绍了关于利用Springboot+vue实现图片上传至数据库并显示的相关资料,需要的朋友可以参考下

一、前端设置

前端是Vue + Element-UI 采用el-upload组件(借鉴官方)上传图片:

<el-upload
     ref="upload"
     class="avatar-uploader"
     action="/setimg"
     :http-request="picUpload"
     :show-file-list="false"
     :auto-upload="false"
     :on-success="handleAvatarSuccess"
     :before-upload="beforeAvatarUpload">
   <img v-if="$hostURL+imageUrl" :src="$hostURL+imageUrl" class="avatar">
   <i v-else class="el-icon-plus avatar-uploader-icon"></i>
 </el-upload>

<el-button type="primary" @click="submitUpload">修改</el-button>

action在这里可以随便设置,因为在后面有 :http-request 去自己设置请求,注意由于是自己写请求需要 :auto-upload=“false” ,并且由于是前后端连接要解决跨域问题,所以在 $hostURL+imageUrl 定义了一个全局变量:

//在main.js中
	Vue.prototype.$hostURL='http://localhost:8082'

在methods中:

methods:{
//这里是官方的方法不变
	handleAvatarSuccess(res, file){
	      this.imageUrl = URL.createObjectURL(file.raw);
	},
    beforeAvatarUpload(file) {
      const isJPG = file.type === 'image/jpeg';
      const isLt2M = file.size / 1024 / 1024 < 2;

      if (!isJPG) {
        this.$message.error('上传头像图片只能是 JPG 格式!');
      }
      if (!isLt2M) {
        this.$message.error('上传头像图片大小不能超过 2MB!');
      }
      return isJPG && isLt2M;
    },
//这里是自定义发送请求
    picUpload(f){
     let params = new FormData()
     //注意在这里一个坑f.file
     params.append("file",f.file);
     this.$axios({
       method:'post',
       //这里的id是我要改变用户的ID值
       url:'/setimg/'+this.userForm.id,
       data:params,
       headers:{
         'content-type':'multipart/form-data'
       }
     }).then(res=>{
     //这里是接受修改完用户头像后的JSON数据
       this.$store.state.menu.currentUserInfo=res.data.data.backUser
       //这里返回的是头像的url
       this.imageUrl = res.data.data.backUser.avatar
     })
   },
   //触发请求
    submitUpload(){
   this.$refs.upload.submit();
 	}
}

在上面代码中有一个坑 f.file ,我看了许多博客,发现有些博客只有 f 没有 .file 导致出现401、505错误。

二、后端代码

1.建立数据库

这里头像avatar是保存的上传图片的部分url

2.实体类、Mapper

实体类:

采用mybatis plus

@Data
public class SysUser extends BaseEntity{
//这里的BaseEntity是id,statu,created,updated数据
    private static final Long serialVersionUID = 1L;

    @NotBlank(message = "用户名不能为空")
    private String username;

//    @TableField(exist = false)
    private String password;
    @NotBlank(message = "用户名称不能为空")
    private String name;
    //头像
    private String avatar;

    @NotBlank(message = "邮箱不能为空")
    @Email(message = "邮箱格式不正确")
    private String email;
    private String tel;
    private String address;
    @TableField("plevel")
    private Integer plevel;
    private LocalDateTime lastLogin;
}
@Mapper
@TableName("sys_user")
public interface SysUserMapper extends BaseMapper<SysUser> {
}

3.接受请求,回传数据

    @Value("${file.upload-path}")
    private String pictureurl;
    @PostMapping("/setimg/{id}")
    public Result setImg(@PathVariable("id") Long id, @RequestBody MultipartFile file){
        String fileName = file.getOriginalFilename();
        File saveFile = new File(pictureurl);
        //拼接url,采用随机数,保证每个图片的url不同
        UUID uuid = UUID.randomUUID();
        //重新拼接文件名,避免文件名重名
        int index = fileName.indexOf(".");
        String newFileName ="/avatar/"+fileName.replace(".","")+uuid+fileName.substring(index);
        //存入数据库,这里可以加if判断
        SysUser user = new SysUser();
        user.setId(id);
        user.setAvatar(newFileName);
        sysUserMapper.updateById(user);
        try {
            //将文件保存指定目录
            file.transferTo(new File(pictureurl + newFileName));
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("保存成功");
        SysUser ret_user = sysUserMapper.selectById(user.getId());
        ret_user.setPassword("");
        return Result.succ(MapUtil.builder()
                .put("backUser",ret_user)
                .map());
    }

yml文件中图片的保存地址:

file:
  upload-path: D:\Study\MyAdmin\scr

三、显示图片

1.后端配置

实现前端Vue :scr 更具url显示头像图片,则必须设置WebMVC中的静态资源配置

建立WebConfig类

@Configuration
public class WebConfig implements WebMvcConfigurer{
    private String filePath = "D:/Study/MyAdmin/scr/avatar/";
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/avatar/**").addResourceLocations("file:"+filePath);
        System.out.println("静态资源获取");
    }
}

这样就可是显示头像图片了

2.前端配置

注意跨域问题以及前面的全局地址变量

vue.config.js文件(若没有则在scr同级目录下创建):

module.exports = {
    devServer: {
        // 端口号
        open: true,
        host: 'localhost',
        port: 8080,
        https: false,
        hotOnly: false,
        // 配置不同的后台API地址
        proxy: {
            '/api': {
            //后端端口号
                target: 'http://localhost:8082',
                ws: true,
                changOrigin: true,
                pathRewrite: {
                    '^/api': ''
                }
            }
        },
        before: app => {}
    }
}

main.js:

	axios.defaults.baseURL = '/api'

总结

到此这篇关于利用Springboot+vue实现图片上传至数据库并显示的文章就介绍到这了,更多相关Springboot vue图片上传至数据库并显示内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Javadoc标签和Javadoc注释规范说明

    Javadoc标签和Javadoc注释规范说明

    这篇文章主要介绍了Javadoc标签和Javadoc注释规范说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java Red5服务器实现流媒体视频播放

    Java Red5服务器实现流媒体视频播放

    这篇文章主要介绍了Java Red5服务器实现流媒体视频播放,对视频播放感兴趣的同学,可以参考下
    2021-04-04
  • SpringCloud超详细讲解负载均衡组件Ribbon源码

    SpringCloud超详细讲解负载均衡组件Ribbon源码

    在微服务中,对服务进行拆分之后,必然会带来微服务之间的通信需求,而每个微服务为了保证高可用性,又会去部署集群,那么面对一个集群微服务进行通信的时候,如何进行负载均衡也是必然需要考虑的问题
    2022-07-07
  • SpringBoot Security实现单点登出并清除所有token

    SpringBoot Security实现单点登出并清除所有token

    Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。它的核心是一组过滤器链,不同的功能经由不同的过滤器
    2023-01-01
  • Spring AOP快速入门及开发步骤

    Spring AOP快速入门及开发步骤

    Spring AOP(面向切面编程)核心概念包括切面(Aspect)、连接点(JoinPoint)、切点(Pointcut)、通知(Advice)等,通过在不改变原代码的情况下,对方法进行增强,实现了代码的解耦和功能扩展,本文带来大家掌握Spring 中 AOP 的开发步骤,感兴趣的朋友一起看看吧
    2024-10-10
  • Java生成随机数的2种示例方法代码

    Java生成随机数的2种示例方法代码

    在Java中,生成随机数有两种方法。1是使用Random类。2是使用Math类中的random方法。看下面的例子使用吧
    2013-11-11
  • Java中的访问修饰符详细解析

    Java中的访问修饰符详细解析

    以下是对Java中的访问修饰符进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • Java的常见热门ORM框架优缺点区别

    Java的常见热门ORM框架优缺点区别

    Java ORM框架是一种用于将Java对象映射到关系型数据库中的工具,使得开发人员能够通过对象操作数据库而不必直接使用SQL查询,Java开发变得更加高效和易于维护,选择适合你的ORM框架是根据你的需求决定的,比如你的应用场景,数据结构和技术水平等
    2024-02-02
  • Java设计模式之观察者模式详解

    Java设计模式之观察者模式详解

    这篇文章主要介绍了Java设计模式之观察者模式详解,对象之间的多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化,需要的朋友可以参考下
    2023-12-12
  • SpringBoot小程序推送信息的项目实践

    SpringBoot小程序推送信息的项目实践

    本文主要介绍了SpringBoot小程序推送信息的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04

最新评论