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文件上传内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中IO流之字符流与字节流的转换方式

    Java中IO流之字符流与字节流的转换方式

    在Java中,字节流与字符流是处理数据的两种方式,字节流适用于处理各种数据类型,如图片、音频等非文本数据,而字符流专门用于处理文本数据,Java提供了InputStreamReader和OutputStreamWriter这两个类来实现字节流向字符流的转换
    2024-10-10
  • 到底如何设置Java线程池的大小的方法示例

    到底如何设置Java线程池的大小的方法示例

    在我们日常业务开发过程中,或多或少都会用到并发的功能。那么并发线程池到底设置多大呢?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 深入理解Java中的弱引用

    深入理解Java中的弱引用

    这篇文章主要介绍了深入理解Java中的弱引用,本文讲解了强引用、弱引用、引用队列、四种引用、软引用、虚引用等内容,需要的朋友可以参考下
    2015-01-01
  • springboot捕获全局异常实现过程

    springboot捕获全局异常实现过程

    本文主要介绍了Java中的异常和错误,包括Exception和Error的区别、如何捕捉全局异常、自定义异常的实现等,通过实例代码和步骤,展示了如何在Spring Boot项目中实现全局异常处理,并自定义异常类来增强程序的健壮性
    2026-03-03
  • SpringBoot如何设置404、500返回统一格式json

    SpringBoot如何设置404、500返回统一格式json

    这篇文章主要介绍了SpringBoot如何设置404、500返回统一格式json问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解

    Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解

    这篇文章主要介绍了Mybatis或Mybatis-Plus框架的xml文件中特殊符号的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Spring整合Mybatis实操分享

    Spring整合Mybatis实操分享

    这篇文章主要介绍了Spring整合Mybatis实操分享,文章首先通过介绍Mybatis的工作原理展开Spring整合Mybatis的详细内容,需要的小伙伴可以参考一下
    2022-04-04
  • 使用Java实现简单的区块链程序的方法

    使用Java实现简单的区块链程序的方法

    这篇文章主要介绍了使用Java实现简单的区块链程序的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Spring中实例化bean的四种方式详解

    Spring中实例化bean的四种方式详解

    这篇文章主要给大家介绍了关于Spring中实例化bean的四种方式,分别是setter 方法、构造函数、静态工厂以及实例工厂等四种方法,分别给出了示例代码供大家参考学习,需要的朋友们下面随着小编来一起学习学习吧。
    2017-12-12
  • 解决RabbitMq消息队列Qos Prefetch消息堵塞问题

    解决RabbitMq消息队列Qos Prefetch消息堵塞问题

    这篇文章主要为大家介绍了关于如何解决解决RabbitMq Qos Prefetch消息堵塞的问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2022-01-01

最新评论