开始

图片路径地址更新到数据库

service

CenterUserService
image.png

image.png

  1. /**
  2. * 用户头像更新
  3. * @param userId
  4. * @param faceUrl
  5. * @return
  6. */
  7. public Users updateFace(String userId,String faceUrl);

实现类

更新

image.png

@Transactional(propagation = Propagation.REQUIRED)
    @Override
    public Users updateFace(String userId, String faceUrl) {
        Users updateUser=new Users();
        updateUser.setId(userId);
        updateUser.setFace(faceUrl);
        updateUser.setUpdatedTime(new Date());
        usersMapper.updateByPrimaryKeySelective(updateUser);

        return queryUserInfo(userId);
    }

controller

image.png
用户保存是在本地的地址
image.png
更新的地址 我们应该填写这个地址
image.png
前面可以当做图片的访问地址
image.png

配置文件增加配置
image.png
这是我本地的配置

file.imageServerUrl=http://localhost:8088/

配置类,然后生成getter和setter
image.png

private String imageServerUrl;

image.png
image.png

image.png
前端用户信息的覆盖,直接从下面的方法内,复制过来这段代码
image.png
前端浏览器可能会存在缓存,如果存在了缓存,图片可能就不能及时在前端更新
所以这里我们就加上时间戳
image.png
加上年月日,时分秒
image.png
最终代码

@ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
    @PostMapping("uploadFace")
    public IMOOCJSONResult uploadFace(
            @ApiParam(name = "userId",value = "用户id",required = true)
            @RequestParam(name = "userId") String userId
            ,@ApiParam(name = "file",value = "用户头像",required = true) MultipartFile file
            , HttpServletRequest request, HttpServletResponse response
    ) {
        // 定义头像保存的地址
//        String fileSpace=IMAGE_USER_FACE_LOCATION;
        String fileSpace=fileUpload.getImageUserFaceLocation();
        //在路径上位每一个用户增加一个userId 用于区分不同用户上传
        String uploadPathPrefix = File.separator+userId;
        // 开始上传
        if(file!=null){
            FileOutputStream fileOutputStream=null;
            try {
                // 货的文件上传的文件名称
                String fileName = file.getOriginalFilename();
                if(StringUtils.isNotBlank(fileName)) {
                    // 保存文件的格式 face-{user-id}.png
                    String[] fileNameArr = fileName.split("\\.");
                    // 获得文件的后缀名
                    String suffix = fileNameArr[fileNameArr.length - 1];
                    // face-{user-id}.png
                    // 文件名称重组 覆盖式上传 增量式:自己额外拼接当前时间
                    String newFileName = "face-"+userId+"."+suffix;
                    // 上传的头像最终保存的位置
                    String finalFacePath = fileSpace+uploadPathPrefix+File.separator+newFileName;
                    // 用于提供给web服务器访问的地址
                    uploadPathPrefix+=("/"+newFileName);

                    File outFile=new File(finalFacePath);
                    if(outFile.getParentFile()!=null) {
                        // 创建文件夹
                        outFile.getParentFile().mkdir();
                    }
                    fileOutputStream = new FileOutputStream(outFile);
                    InputStream inputStream = file.getInputStream();
                    IOUtils.copy(inputStream,fileOutputStream);
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    if(fileOutputStream!=null) {
                        fileOutputStream.flush();
                        fileOutputStream.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else {
            return IMOOCJSONResult.errorMsg("文件不能为空!");
        }
        // 获取图片服务器地址
        String imageServerUrl = fileUpload.getImageServerUrl();
        String finalUserFaceUrl=imageServerUrl+uploadPathPrefix+"?t="+ DateUtil.getCurrentDateString(DateUtil.DATE_PATTERN);

        Users userResult = centerUserService.updateFace(userId, finalUserFaceUrl);
        userResult=setNullProperty(userResult);
        CookieUtils.setCookie(request,response,"user", JsonUtils.objectToJson(userResult),true);
        return IMOOCJSONResult.ok();
    }

测试

maven install。然后重启服务测试。
image.png

image.png

image.png

结束