解决SpringBoot图片上传需重启服务器才能显示问题

问题简述:

解决SpringBoot图片上传需重启服务器才能显示问题

把头像上传到本地路径后,无法立即访问头像,需要重启服务器才可以访问到

这是因为对服务器的保护措施导致的,服务器不能对外部暴露真实的资源路径,需要配置虚拟路径映射访问。

问题解决:

重建本地资源路径

package com.catanddogdiary.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
//    @Override
//    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//
//        if(!registry.hasMappingForPattern("/static/**")){
//            registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
//            registry.addResourceHandler("/static/avatar/**").addResourceLocations("file:G:\\IDEA2023\\CatAndDogDiaryBackEnd\\CatAndDogEnd\\src\\main\\resources\\static\\avatar\\"); /*绝对路径*/
//        }
//        super.addResourceHandlers(registry);
//    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/upload/**").addResourceLocations("file:upload/");
    }

}

 新建一个WebConfig类,实现自定义的资源映射函数addResourceHandlers。

addResourceHandler()里配置需要映射的文件,
addResourceLocations()配置该文件的绝对路径。

    @Override
    @ApiOperation(value = "根据用户id修改用户头像", notes = "根据用户id修改用户头像")
    public Result updateUserAvatarById(List<MultipartFile> files, int userId) {
        // 校验头像
        if (files.size() > 1) {
            return Result.fail("头像只能上传一个!", AVATARFAIL);
        }
        if (!CheckUtils.isAvatarInvalid(files.get(0).getOriginalFilename())) {
            // 无效头像,返回错误信息
            return Result.fail("头像格式有误!", AVATARFAIL);
        }
        // 获取文件名称
        String avatar = files.get(0).getOriginalFilename();

        // 生成UUID
        avatar = UUID.randomUUID().toString().replace("-", "") + avatar.substring(avatar.lastIndexOf("."));

        // 将文件保存到本地

        if (avatar != null) {
            // 生成本地地址,将地址保存到数据库
            String avatarUrl = "http://localhost:8080/catanddog/upload/" + avatar;
            // 将文件保存到本地地址
            try {
//                files.get(0).transferTo(new File("G:\\IDEA2023\\CatAndDogDiaryBackEnd\\CatAndDogEnd\\src\\main\\resources\\static\\avatar\\" + avatar));
                files.get(0).transferTo(new File("G:\\IDEA2023\\CatAndDogDiaryBackEnd\\CatAndDogEnd\\upload\\" + avatar));
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            // 更新头像
            int user = userMapper.updateUserAvatarById(avatarUrl, userId);
            // 获取数据库中的头像
            String iconUrl = userMapper.selectById(userId).getAvatar();
            // 判断用户是否存在
            if (user == 0) {
                // 用户不存在,返回错误信息
                return Result.fail("用户不存在!", USERNAMEFAIL);
            }
            return Result.success(iconUrl, SUCCESS);
        }

        return Result.fail("头像只能包含数字、字母、中文!", AVATARFAIL);
    }

实现类

结果:

 

没有重启服务器也可以访问了 

  • 12
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值