springboot3生成本地文件url的实现示例

 更新时间:2024年01月10日 09:07:33   作者:灯笼只能来教室体验生活  
本文主要介绍了springboot3生成本地文件url的实现示例,从而提供一种高效的文件管理方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

流程

  • avatar_dir:请求图片在服务端的存放路径
  • user.dir:项目根目录

在这里插入图片描述

效果

在这里插入图片描述

静态资源访问

在这里插入图片描述

application.yml
设置静态文件存储路径

custom:
  upload:
    avatar_dir: ${user.dir}/avatar_dir/
    avatar_dir_name: avatar_dir

FileUploadConfig
application.yml 信息读取配置类

@Data
@Configuration
@ConfigurationProperties(prefix = "custom.upload")
public class FileUploadConfig {
   private String avatarDir;
   private String avatarDirName;
}

静态资源访问配置类

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    FileUploadConfig uploadConfig;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        File file = new File(uploadConfig.getAvatarDir());
        String path = "file:" + file + File.separator;
        // 匹配 http://ip:port/avatar_dir/ 下的所有文件
        registry.addResourceHandler("/avatar_dir/**")
                // 实际静态文件地址
                .addResourceLocations(path);
    }
}

Service

@Service
public interface FileService {
	// 获取图像 Url
    public Result<String> getImageUrl(User user, String host, int port);
	// 路径拼接
    public String joinPaths(String... paths);
}

ServiceImpl

http://ip:port/静态文件存储路径/文件名

String imageUrl = String.format(
	"http://%s:%d/%s", host, port, joinPaths(
  								  		uploadConfig.getAvatarDirName(), 
  								  		avatar
  							  		)
);

实现代码

@Service
public class FileServiceImpl implements FileService {
    @Autowired
    FileUploadConfig uploadConfig;

    @Autowired
    IUserService userService;

	// 路径拼接
    @Override
    public String joinPaths(String... paths) {
        Path resultPath = Paths.get("");
        for (String path : paths) {
            resultPath = resultPath.resolve(path);
        }
        return resultPath.toString();
    }
    
    // 判断文件是否存在
    private Boolean isUserAvatarExists(String avatar) {
        String path = joinPaths(uploadConfig.getAvatarDir(), avatar);
        File filePath = new File(path);
        return filePath.exists();
    }

	// 获取图像 Url
    @Override
    public Result<String> getImageUrl(User user, String host, int port) {
    	// 用户头像的文件名唯一,并保存在了数据库中,avatar = xxx.png
        String avatar = this.userService.getById(user.getUserId()).getAvatar();
        
        if (isUserAvatarExists(avatar)) {
            String imageUrl = String.format("http://%s:%d/%s", host, port, joinPaths(uploadConfig.getAvatarDirName(), avatar));
            return Result.successfulResult("获取成功", imageUrl);
        }
        return Result.errorResult("文件丢失");
    }
}

Controller

@Tag(name = "文件上传接口")
@RestController
@RequestMapping("/sign/file")
public class FileUploadController {
    @Autowired
    FileService fileService;

    @Operation(summary = "获取图片 URL")
    @PostMapping("/image/get")
    public Result<String> getImageUrl(@RequestBody User user) {
        URI currentUri = ServletUriComponentsBuilder.fromCurrentRequestUri().build().toUri();
        // currentUri.getHost() 获取请求 IP,如 localhost
        // currentUri.getPort() 获取请求 端口号,如 8080
        return fileService.getImageUrl(user, currentUri.getHost(), currentUri.getPort());
    }
}

到此这篇关于springboot3生成本地文件url的实现示例的文章就介绍到这了,更多相关springboot3生成本地文件url内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 带你了解Java中的异常处理(上)

    带你了解Java中的异常处理(上)

    这篇文章主要介绍了Java异常处理的相关资料,帮助大家更好的理解和学习java,感兴趣的朋友可以了解下
    2020-08-08
  • 使用Spring Boot集成FastDFS的示例代码

    使用Spring Boot集成FastDFS的示例代码

    本篇文章主要介绍了使用Spring Boot集成FastDFS的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 详解Java中二分法的基本思路和实现

    详解Java中二分法的基本思路和实现

    二分法是一个非常高效的算法,它常常用于计算机的查找过程中。本文将通过示例为大家详细讲讲二分法的基本思路和实现,感兴趣的可以了解一下
    2022-08-08
  • java的MybatisPlus调用储存过程的返回数据问题

    java的MybatisPlus调用储存过程的返回数据问题

    这篇文章主要介绍了java的MybatisPlus调用储存过程的返回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Kotlin内存陷阱inline使用技巧示例详解

    Kotlin内存陷阱inline使用技巧示例详解

    这篇文章主要为大家介绍了Kotlin内存陷阱inline使用技巧示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 基于spring boot实现一个全局异常处理器

    基于spring boot实现一个全局异常处理器

    在项目开发中,我们可以基于spring boot提供的切面特性,来很轻松的实现全局异常的处理,所以本文主要为大家介绍了如何基于spring boot实现一个全局异常处理器,有需要的可以参考下
    2023-09-09
  • nacos配置在代码中引用的方法讲解

    nacos配置在代码中引用的方法讲解

    这篇文章主要介绍了nacos配置在代码中如何引用,如果主配置中配置的内容和拓展配置的内容重复则按主配置的配置 ,如果拓展配置中的内容和另一个拓展配置中的内容重复,则按下标大的配置作为最终的配置,对nacos配置代码引用相关知识感兴趣朋友一起看看吧
    2022-12-12
  • JWT原理与java操作jwt验证详解

    JWT原理与java操作jwt验证详解

    这篇文章主要介绍了JWT原理与java操作jwt验证,详细分析了JWT的基本概念、原理与java基于JWT进行token验证的相关操作技巧,需要的朋友可以参考下
    2023-06-06
  • Java顺序表实现图书管理系统

    Java顺序表实现图书管理系统

    这篇文章主要为大家详细介绍了Java顺序表实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • MyBatis 实现动态排序的多表查询

    MyBatis 实现动态排序的多表查询

    本文将展示如何在 Java 项目中结合 MyBatis 实现动态排序,尤其是在涉及多表查询的情况下,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05

最新评论