SpringBoot集成minio实现文件上传和删除功能

 更新时间:2023年11月23日 09:42:46   作者:我心向阳cd  
这篇文章主要介绍了SpringBoot集成minio实现文件上传和删除功能,详细介绍每个功能的实现步骤和代码示例,具有一定的参考价值,感兴趣的可以了解一下

1.加入依赖

<!-- 对象存储 Minio -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>${minio.version}</version>
        </dependency>

2.yml配置

minio:
  endpoint: http://ip:9000
  accessKey: accessKey
  secretKey: secretKey
  bucketName: bucketName

3.配置类

@Configuration
public class MinioConfig {
 
    @Autowired
    private MinioProperties minioProperties;
 
    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(minioProperties.getEndpoint())
                .credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
                .build();
    }
}

4.属性配置类

@ConfigurationProperties(prefix = "minio")
@Component
@Data
public class MinioProperties {
    private String endpoint;
    private String accessKey;
    private String secretKey;
    private String bucketName;
}

5.工具类:示例文件上传和删除

@Component
@Slf4j
public class MinioUtil {
 
    @Autowired
    private MinioProperties minioProperties;
 
    @Autowired
    private MinioClient minioClient;
 
    public String uploadFile(MultipartFile file, String bucketName) throws Exception {
        if (file == null || file.getSize() == 0) {
            log.error("==> 上传文件异常:文件大小为空 ...");
            throw new RuntimeException("请选择需要上传的文件");
        }
 
        String originalFileName = file.getOriginalFilename();
        String contentType = file.getContentType();
 
        String key = UUID.randomUUID().toString().replace("-", "");
        String suffix = originalFileName.substring(originalFileName.lastIndexOf("."));
        String objectName = String.format("%s%s", key, suffix);
        log.info("==> 开始上传文件至 Minio, ObjectName: {}", objectName);
        minioClient.putObject(PutObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .stream(file.getInputStream(), file.getSize(), -1)
                .contentType(contentType)
                .build());
        String url = String.format("%s/%s/%s", minioProperties.getEndpoint(), bucketName, objectName);
        log.info("==> 上传文件至 Minio 成功,访问路径: {}", url);
        return url;
    }
 
    //删除文件:
    public boolean remove(String bucketName, String fileName) {
        /**
         * String bucketName = "test2";
         * String fileName = "/2023-04-07/16808560218465670_img.png";
         * address+bucketName+fileName 就是访问路径,删除需要后两个参数。
         */
        try {
            minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build());
        } catch (Exception e) {
            e.printStackTrace();
            log.error("文件删除失败");
            return false;
        }
        log.info("删除成功");
        return true;
    }
 
 
}

6.文件上传示例

public R uploadFile(MultipartFile file) {
        try {
            String fileName = file.getOriginalFilename();
            String url = minioUtil.uploadFile(file, bucketName);
            if (StringUtils.isNotEmpty(url)) {
                File fileEntity = new File();
                fileEntity.setBucketName(bucketName);
                fileEntity.setFileName(fileName);
                fileEntity.setMinioFileName(getMinioFileName(url));
                fileEntity.setFilePath(url);
                fileEntity.setCreateBy(LoginUtils.getUsername());
                fileEntity.setCreateTime(new Date());
                fileMapper.insert(fileEntity);
            }
            return R.ok(url);
        } catch (Exception e) {
            log.error("==> 上传文件异常: ", e);
            return R.fail("文件上传失败");
        }
    }

7.文件删除示例

public R remove(MinioFileDto fileDto) {
        try {
            boolean remove = minioUtil.remove(fileDto.getBucketName(), fileDto.getFileName());
            if (remove) {
                //删除数据库记录
                fileMapper.delete(new LambdaQueryWrapper<File>()
                        .eq(File::getBucketName, fileDto.getBucketName())
                        .eq(File::getMinioFileName, fileDto.getFileName()));
            }
            return R.ok();
        } catch (Exception e) {
            return R.fail("文件删除失败");
        }
    }

到此这篇关于SpringBoot集成minio实现文件上传和删除功能的文章就介绍到这了,更多相关SpringBoot minio文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea 多模块项目依赖父工程class找不到问题的方法

    idea 多模块项目依赖父工程class找不到问题的方法

    这篇文章主要介绍了idea 多模块项目依赖父工程class找不到问题的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • SpringBoot3整合EasyExcel动态实现表头重命名

    SpringBoot3整合EasyExcel动态实现表头重命名

    这篇文章主要为大家详细介绍了SpringBoot3整合EasyExcel如何通过WriteHandler动态实现表头重命名,文中的示例代码讲解详细,有需要的可以了解下
    2025-03-03
  • Java通过word模板实现创建word文档报告

    Java通过word模板实现创建word文档报告

    这篇文章主要为大家详细介绍了Java如何通过word模板实现创建word文档报告的教程,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-09-09
  • Spring Cloud Alibaba之Sentinel实现熔断限流功能

    Spring Cloud Alibaba之Sentinel实现熔断限流功能

    这篇文章主要介绍了Spring Cloud Alibaba之Sentinel,这里使用阿里的sentinel来实现熔断限流功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java正则表达式匹配不到结果的解决

    Java正则表达式匹配不到结果的解决

    这篇文章主要介绍了Java正则表达式匹配不到结果的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • SpringBoot源码剖析之属性文件加载原理

    SpringBoot源码剖析之属性文件加载原理

    这篇文章主要给大家介绍了关于SpringBoot源码剖析之属性文件加载原理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-02-02
  • Hikari 数据库连接池内部源码实现的小细节

    Hikari 数据库连接池内部源码实现的小细节

    这篇文章主要介绍了Hikari 数据库连接池内部源码实现的小细节,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • springboot自动装配原理初识

    springboot自动装配原理初识

    这篇文章主要介绍了springboot自动装配原理的相关资料,帮助大家更好的理解和学习使用springboot,感兴趣的朋友可以了解下
    2021-04-04
  • maven的安装配置以及在IDEA中的配置图文教程

    maven的安装配置以及在IDEA中的配置图文教程

    下面小编就为大家分享一篇maven的安装配置以及在IDEA中的配置图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • Java操作PDF文件实现签订电子合同详细教程

    Java操作PDF文件实现签订电子合同详细教程

    这篇文章主要介绍了如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OBS中的步骤,需要的朋友可以参考下
    2025-01-01

最新评论