开始

E:\学习中\Java架构师体系课:还原千万级项目从0到100全过程,技术&思维双提升-wjw\阶段一:单体电商项目架构,开发与上线(1~5周)\04.用户中心 ,订单\评价管理开发\第2章 用户中心 -上传头像功能开发

完善代码,文件上传

file有个方法,getOriginalFilername获取文件的原始文件名。
image.png
我们要操作字符串类型的话,还是要判断是否为空。不为空的情况下,才能对文件名进行处理。
image.png
我们以这种形式去保存
image.png

image.png
这种上传,属于覆盖式的上传。因为每次上传的文件名都是一样的。
image.png

image.png

文件最终上传保存的地址

image.png
image.png
判断这个路径是否为空,如果为空就生成这样一个路径
image.png
加上s,把它的父级目录都会生成
image.png
这里有个IO流的异常,这里先暂时不管。

image.png
获取文件的输入流
image.png
文件的保存
image.png
里面有很多的方法,这里我们使用这个方法。参数是需要一个inputStream和一个outputStream
image.png
image.png
把整个方法进行try catch
image.png
ctrl+alt+T 选中大代码 快速包在try catch里面。如果ctrl+alt+t不管用的话,那么再加上windows键
ctrl+alt+windows+t
image.png

这样刚才红色波浪线就就会被catch到。
image.png
fileOutputStream一旦使用完毕就要被关闭。首先把 fileOutputStream在上面声明
image.png
在finally里面关闭
image.png
这里也会有相应的异常
image.png

这里也要进行try catch
image.png

重启服务,测试

目前文件只到faces这个文件夹
image.png
启动服务,报错
image.pngimage.png

image.png
再次重启
image.png
image.png

image.png
图片没有发生更改,这是因为我们后端代码还没有把路径给返回回来。
image.png
看磁盘路径
image.png

最终代码

  1. @ApiOperation(value = "修改用户信息",notes = "修改用户信息",httpMethod = "POST")
  2. @PostMapping("uploadFace")
  3. public IMOOCJSONResult uploadFace(
  4. @ApiParam(name = "userId",value = "用户id",required = true)
  5. @RequestParam(name = "userId") String userId
  6. ,@ApiParam(name = "file",value = "用户头像",required = true) MultipartFile file
  7. , HttpServletRequest request, HttpServletResponse response
  8. ) {
  9. // 定义头像保存的地址
  10. String fileSpace=IMAGE_USER_FACE_LOCATION;
  11. //在路径上位每一个用户增加一个userId 用于区分不同用户上传
  12. String uploadPathPrefix = File.separator+userId;
  13. // 开始上传
  14. if(file!=null){
  15. FileOutputStream fileOutputStream=null;
  16. try {
  17. // 货的文件上传的文件名称
  18. String fileName = file.getOriginalFilename();
  19. if(StringUtils.isNotBlank(fileName)) {
  20. // 保存文件的格式 face-{user-id}.png
  21. String[] fileNameArr = fileName.split("\\.");
  22. // 获得文件的后缀名
  23. String suffix = fileNameArr[fileNameArr.length - 1];
  24. // face-{user-id}.png
  25. // 文件名称重组 覆盖式上传 增量式:自己额外拼接当前时间
  26. String newFileName = "face-"+userId+"."+suffix;
  27. // 上传的头像最终保存的位置
  28. String finalFacePath = fileSpace+uploadPathPrefix+File.separator+newFileName;
  29. File outFile=new File(finalFacePath);
  30. if(outFile.getParentFile()!=null) {
  31. // 创建文件夹
  32. outFile.getParentFile().mkdir();
  33. }
  34. fileOutputStream = new FileOutputStream(outFile);
  35. InputStream inputStream = file.getInputStream();
  36. IOUtils.copy(inputStream,fileOutputStream);
  37. }
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. } finally {
  41. try {
  42. if(fileOutputStream!=null) {
  43. fileOutputStream.flush();
  44. fileOutputStream.close();
  45. }
  46. } catch (IOException e) {
  47. e.printStackTrace();
  48. }
  49. }
  50. } else {
  51. return IMOOCJSONResult.errorMsg("文件不能为空!");
  52. }
  53. return IMOOCJSONResult.ok();
  54. }

结束