• 图片上传并映射回显


    目录

    简介

    代码展示

    1、配置图片保存地址

    2、拦截器配置映射地址

    3、接口

    修改地址为绝对路径


    简介

    我们知道文件的上传就是把本地的文件上传到服务器上(在服务器中指定地址保存);通过访问服务器地址去查看文件;但是直接通过域名和保存地址是无法访问到上传的文件!需要使用映射来帮助我们查看上传到服务器中的文件!

    效果:

    1、调用/upload接口,上传名为1.jpg的图片;接口返回服务器映射后的url地址;

    2、访问返回的地址即可看到图片信息

    代码展示

    1、配置图片保存地址

    2、拦截器配置映射地址

    1. import com.chensir.interceptor.TokenInterceptor;
    2. import org.springframework.beans.factory.annotation.Value;
    3. import org.springframework.context.annotation.Configuration;
    4. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    5. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
    6. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    7. /**
    8. * @author ChenSir
    9. * @Date 2023/9/20
    10. **/
    11. @Configuration
    12. public class WebConfig implements WebMvcConfigurer {
    13. @Value("${chensir.path.upload}")
    14. private String upload;
    15. @Override
    16. public void addResourceHandlers(ResourceHandlerRegistry registry) {
    17. //和页面有关的静态目录都放在项目的static目录下
    18. // registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    19. //upload是图片保存的地址,详细地址在配置文件中; "file:" + upload 是文件真实的存储路径; "/photos/**"是映射访问地址,通过访问
    20. //http://localhost:8081/photos/d3cf0281-bb7f-40e0-ab77-406db95ccf2c.jpg 即可访问到图片
    21. registry.addResourceHandler("/photos/**").addResourceLocations("file:" + upload);
    22. }
    23. }

    3、接口

    1. package com.chensir.system.controller;
    2. import lombok.extern.slf4j.Slf4j;
    3. import org.springframework.beans.factory.annotation.Value;
    4. import org.springframework.web.bind.annotation.*;
    5. import org.springframework.web.multipart.MultipartFile;
    6. import javax.servlet.http.HttpServletResponse;
    7. import java.io.File;
    8. import java.io.IOException;
    9. import java.util.HashMap;
    10. import java.util.Map;
    11. import java.util.UUID;
    12. /**
    13. * 文件上传
    14. *
    15. * @author ChenSir
    16. * @Date 2023/10/9
    17. **/
    18. @RestController
    19. @Slf4j
    20. public class FileController {
    21. @Value("${chensir.path.upload}")
    22. private String photoPath;
    23. @Value("${chensir.url.prefix}")
    24. private String filePrefix;
    25. @PostMapping("/upload")
    26. public String insertOrderImg(@RequestParam("file") MultipartFile file, HttpServletResponse response) {
    27. // 返回Map
    28. Map resultMap = new HashMap<>();
    29. String imgUrl =null;
    30. // 文件上传路径
    31. //String location = "D:\\photos\\"; //TODO 改为服务器路径
    32. String location = photoPath;
    33. if (!file.isEmpty()) {
    34. // 获取文件原始名称 a.png -> a
    35. String originalFilename = file.getOriginalFilename();
    36. // 获取文件后缀 .png
    37. String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
    38. //设置允许上传文件类型
    39. String suffixList = ".jpg,.png,.ico,.bmp,.jpeg,.pdf,.docx,.webp";
    40. // 判断是否包含
    41. if (suffixList.contains(extName.trim().toLowerCase())) {
    42. // 保存文件的路径
    43. String fileName = UUID.randomUUID() + extName;
    44. String path = location + fileName;
    45. // 查看路径是否存在,不存在就创建
    46. //image/jpeg
    47. if (!new File(path).exists()) {
    48. boolean mkdirs = new File(path).mkdirs();
    49. }
    50. // spring的transferTo保存文件方法
    51. try {
    52. file.transferTo(new File(path));
    53. imgUrl = filePrefix + fileName;
    54. } catch (IOException e) {
    55. e.printStackTrace();
    56. log.error("上传文件出错!");
    57. }
    58. }
    59. } else {
    60. resultMap.put("code", "500");
    61. resultMap.put("msg", "未选择图片!");
    62. resultMap.put("data", "");
    63. }
    64. return imgUrl;
    65. }
    66. }

    修改地址为绝对路径

    1. package com.chensir.system.controller;
    2. import com.chensir.result.R;
    3. import lombok.extern.slf4j.Slf4j;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.web.bind.annotation.*;
    6. import org.springframework.web.multipart.MultipartFile;
    7. import javax.servlet.http.HttpServletResponse;
    8. import java.io.File;
    9. import java.io.IOException;
    10. import java.util.HashMap;
    11. import java.util.Map;
    12. import java.util.UUID;
    13. /**
    14. * 文件上传
    15. *
    16. * @author ChenSir
    17. * @Date 2023/10/9
    18. **/
    19. @Slf4j
    20. @RestController
    21. public class FileController {
    22. @Value("${chensir.path.upload}")
    23. private String photoPath;
    24. @Value("${chensir.url.prefix}")
    25. private String filePrefix;
    26. @PostMapping("/upload")
    27. public R insertOrderImg(@RequestParam("file") MultipartFile file, HttpServletResponse response) {
    28. // 返回Map
    29. Map resultMap = new HashMap<>();
    30. String imgUrl = null;
    31. // 文件上传路径
    32. String location = photoPath;
    33. if (!file.isEmpty()) {
    34. // 获取文件原始名称 a.png -> a
    35. String originalFilename = file.getOriginalFilename();
    36. // 获取文件后缀 .png
    37. String extName = originalFilename.substring(originalFilename.lastIndexOf("."));
    38. //设置允许上传文件类型
    39. String suffixList = ".jpg,.png,.ico,.bmp,.jpeg,.pdf,.docx,.webp";
    40. // 判断是否包含
    41. if (suffixList.contains(extName.trim().toLowerCase())) {
    42. // 保存文件的路径
    43. String fileName = UUID.randomUUID() + extName;
    44. String path = location + fileName;
    45. // 解析成为绝对路径
    46. File dest = new File((new File(path).getAbsolutePath()));
    47. // 查看路径是否存在,不存在就创建
    48. //image/jpeg
    49. if (!new File(path).exists()) {
    50. // boolean mkdirs = new File(path).mkdirs();
    51. dest.getParentFile().mkdirs();
    52. }
    53. // spring的transferTo保存文件方法
    54. try {
    55. // file.transferTo(new File(path));
    56. file.transferTo(dest);
    57. imgUrl = filePrefix + fileName;
    58. } catch (IOException e) {
    59. e.printStackTrace();
    60. log.error("上传文件出错!");
    61. }
    62. }
    63. return R.ok(imgUrl);
    64. } else {
    65. resultMap.put("code", "500");
    66. resultMap.put("msg", "未选择图片!");
    67. resultMap.put("data", "");
    68. return R.fail(resultMap);
    69. }
    70. }
    71. }

  • 相关阅读:
    2021 增强式学习RL 李宏毅
    HTML如何制作音乐网站(如何搭建个人音乐网页)
    鲸鱼优化算法改进风储机组一次调频出力分配系数,以频率偏差最小为目标优化函数,结合鲸鱼算法WOA捕食过程,改进风储出力分配系数simulink与matlab联合
    python实现的一些方法,可以直接拿来用的那种
    寻找最长回文串算法题解(力扣第5题)
    Redis面试---缓存问题
    实验4 图像空间滤波
    Git版本管理
    低成本、低门槛、易部署,4800+万户中小企业数字化转型新选择
    前端 Git 使用约定
  • 原文地址:https://blog.csdn.net/weixin_45326523/article/details/133702541