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

相关文章

  • 在Struts2中如何将父类属性序列化为JSON格式的解决方法

    在Struts2中如何将父类属性序列化为JSON格式的解决方法

    本篇文章,小编将为大家介绍关于在Struts2中如何将父类属性序列化为JSON格式的解决方法,有需要的朋友可以参考一下
    2013-04-04
  • Java如何实现CIDR转IP段

    Java如何实现CIDR转IP段

    CIDR是一种用于高效分配和管理 IP 地址的网络编址方法,这篇文章主要为大家详细介绍了如何使用Java实现CIDR转IP段,感兴趣的小伙伴可以参考一下
    2025-03-03
  • springboot使用yml文件配置多环境方式(dev、test、prod)

    springboot使用yml文件配置多环境方式(dev、test、prod)

    这篇文章主要介绍了springboot使用yml文件配置多环境方式(dev、test、prod),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • JAVA中常见异常类

    JAVA中常见异常类

    本文主要介绍了JAVA中的常见异常类。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Java输入处理的常见错误小结

    Java输入处理的常见错误小结

    在 Java 编程中,输入处理是一个基础但又复杂的任务,尤其是在涉及到与用户交互时,本文将对 Java 输入处理的基本机制进行详细解析,需要的可以了解下
    2024-11-11
  • Java如何获取一个随机数 Java猜数字小游戏

    Java如何获取一个随机数 Java猜数字小游戏

    这篇文章主要为大家详细介绍了Java如何获取一个随机数,类似猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 利用Java8 Optional如何避免空指针异常详解

    利用Java8 Optional如何避免空指针异常详解

    Optional可以让你的代码具有可读性,且会避免出现空指针异常。 下面这篇文章主要给大家介绍了关于利用Java8 Optional如何避免空指针异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • Spring使用@Value注解与@PropertySource注解加载配置文件操作

    Spring使用@Value注解与@PropertySource注解加载配置文件操作

    这篇文章主要介绍了Spring使用@Value注解与@PropertySource注解加载配置文件操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • SpringBoot+Vue实现动态菜单的思路梳理

    SpringBoot+Vue实现动态菜单的思路梳理

    这篇文章主要为大家详细介绍了利用SpringBoot+Vue实现动态菜单的思路梳理,文中的示例代码讲解详细,感兴趣的小伙伴可以动手尝试一下
    2022-07-07
  • Java二叉树中LCA问题解决方法两则

    Java二叉树中LCA问题解决方法两则

    这篇文章主要介绍了Java二叉树中LCA问题解决方法,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2022-12-12

最新评论