Vue+Springboot最简单实现上传头像

<el-upload action="/api/users/change_avatar">
     <el-button size="small" type="primary">点击上传</el-button>
</el-upload>

前端就一个按钮,实现上传到后端接口(action便是自己设计的后端接收头像的接口)

public JsonResult <String> changeAvatar(
            HttpSession session,@RequestPart("file") MultipartFile file){
        //判断文件是否为空
        if(file.isEmpty()){
            throw new FileEmptyException("文件为空");
        }
        if(file.getSize()>AVATAR_MAX_SIZE){
            throw new FileSizeException("文件超出限制");  //判断是否超过限制
        }
        //判断文件类型是否是所规定的后缀类型
        String contentType = file.getContentType();
        if(!AVATAR_TYPE.contains(contentType)){
            throw new FileTypeException("文件类型不支持");
        }
        //上传的文件.../upload/文件.png
        String parent = session.getServletContext().getRealPath("upload");
        //File对象指向这个路径,File是否存在
        File dir = new File(parent);
        if(!dir.exists()) {//检测目录是否存在
            dir.mkdirs();  //创建当前目录
        }
        //获取文件名称,UUID获取新字符串作为文件名
        String originalFilename = file.getOriginalFilename();
        int index=originalFilename.lastIndexOf(".");
        String suffix = originalFilename.substring(index);
        //新文件名字
        String filname= UUID.randomUUID().toString().toUpperCase()+suffix;

        File dest=new File(dir,filname);  //此时为空
        try {
            file.transferTo(dest);   //参数file中数据写入空文件(dest)中
        }catch (FileStateException e){
            throw new FileStateException("文件状态异常");
        }
        catch (IOException e) {
            throw new FileUploadIOException("文件读写异常");
        }
        Integer uid = getuidFromSession(session);
        String username = getUsernameFromSession(session);
        //返回头像的路径/upload/test.png
        String avatar="/upload/"+filname;
        userService.changeAvatar(uid,avatar,username);
        //返回用户头像路径给前端页面,用于头像展示使用
        System.out.println(username);
        return new JsonResult<>(OK,avatar);
    }

后端接受文件,通过Session获得对应用户的个人信息,进行数据库update操作(也可根据需求,减少某些代码)

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实现Spring Boot Vue头像上传并回显,可以按照以下步骤进行操作。 1. 前端页面实现图片上传Vue组件中添加一个图片上传组件,使用element-ui的上传组件(el-upload)。具体代码如下: ```html <template> <el-upload class="avatar-uploader" action="/api/upload" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </template> <script> export default { data() { return { imageUrl: '' } }, methods: { beforeUpload(file) { // 限制文件类型和大小 const isJPG = file.type === 'image/jpeg' || file.type === 'image/png' if (!isJPG) { this.$message.error('上传头像图片只能是 JPG 或 PNG 格式!') return false } const isLt2M = file.size / 1024 / 1024 < 2 if (!isLt2M) { this.$message.error('上传头像图片大小不能超过 2MB!') return false } return true }, handleSuccess(response) { if (response.code === 200) { this.imageUrl = response.data this.$emit('update:avatar', response.data) // 通知父组件更新头像 } else { this.$message.error(response.msg) } } } } </script> <style scoped> .avatar-uploader { display: flex; align-items: center; justify-content: center; width: 120px; height: 120px; border-radius: 50%; overflow: hidden; background-color: #f5f5f5; } .avatar { width: 100%; height: 100%; object-fit: cover; } .avatar-uploader-icon { font-size: 28px; color: #8c939d; } </style> ``` 在上传图片前,使用beforeUpload方法对文件类型和大小进行限制。在上传成功后,将服务器返回的图片地址保存到imageUrl中,并通过$emit方法通知父组件更新头像。 2. 后端实现图片上传Spring Boot实现文件上传需要使用MultipartFile类型接收前端传来的文件。具体代码如下: ```java @RestController @RequestMapping("/api") public class FileUploadController { @Value("${file.upload.path}") private String filePath; // 文件保存路径 @PostMapping("/upload") public Result upload(@RequestParam("file") MultipartFile file) { if (file.isEmpty()) { return Result.fail("上传失败,请选择文件"); } String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".")); String newFileName = UUID.randomUUID().toString() + suffix; File dest = new File(filePath + newFileName); try { file.transferTo(dest); return Result.success("上传成功", "/uploads/" + newFileName); } catch (IOException e) { e.printStackTrace(); } return Result.fail("上传失败"); } } ``` 在文件上传接口中,通过@Value注解从配置文件中读取文件保存路径,然后使用MultipartFile类型接收前端传来的文件。接收到文件后,使用UUID生成新的文件名,将文件保存到指定路径,并返回服务器存储的文件地址。 3. 更新用户头像Vue组件中,通过接收父组件传来的用户信息,将头像地址赋值给imageUrl。在头像上传成功后,通过$emit方法通知父组件更新头像。具体代码如下: ```html <template> <div> <avatar-upload :avatar="user.avatar" @update:avatar="updateAvatar"></avatar-upload> <el-button type="primary" @click="updateUser">更新用户信息</el-button> </div> </template> <script> import AvatarUpload from '@/components/AvatarUpload.vue' export default { components: { AvatarUpload }, props: { user: { type: Object, default: () => ({}) } }, data() { return { form: { id: '', username: '', password: '', nickname: '', avatar: '' } } }, created() { this.form = { ...this.user } }, methods: { updateAvatar(avatar) { this.form.avatar = avatar }, updateUser() { // 调用后端接口更新用户信息 } } } </script> ``` 在更新用户信息的方法中,调用后端接口将用户信息更新到数据库中。 ```java @RestController @RequestMapping("/api") public class UserController { @Autowired private UserService userService; @PostMapping("/updateUser") public Result updateUser(@RequestBody User user) { userService.updateUser(user); return Result.success("更新成功"); } } ``` 在UserService中实现更新用户信息的方法。 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public void updateUser(User user) { userMapper.updateById(user); } } ``` 以上就是Spring Boot Vue头像上传并回显的实现方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值