springboot 使用 minio的示例代码

下面是详细的攻略过程。

使用 Minio 存储文件

Minio是一个分布式对象存储服务,除了能提供文件存储、数据备份和归档之外,还能快速实现容量扩展。

使用 Minio 前需要先创建一个存储桶。

val minioEndpoint: String
val minioAccessKey: String
val minioSecretKey: String
val minioRegion: String
val minioBucket: String

val s3Client = AmazonS3ClientBuilder
                .standard()
                .withEndpointConfiguration(
                   EndpointConfiguration(minioEndpoint, minioRegion)
                )
                .withCredentials(
                   AWSStaticCredentialsProvider(
                       BasicAWSCredentials(minioAccessKey, minioSecretKey)
                   )
                ).build()

if (!s3Client.doesBucketExistV2(minioBucket)) {
    s3Client.createBucket(CreateBucketRequest(minioBucket)
       .withCannedAcl(CannedAccessControlList.PublicRead))
}

将以上代码写入到配置文件中即可创建 Minio 存储桶。

第一个示例代码

使用 Minio 进行文件上传和下载操作。在Spring Boot框架中,我们可以使用Java文件服务器client来上传或下载文件。

Java 文件服务器 client 的版本信息以及引入方式如下:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>8.0.3</version>
</dependency>

完成该框架的版本引入后,我们可以使用以下代码实现上传和下载文件的操作:

@Service
public class MinioService {
    private final MinioClient minioClient;

    public MinioService(MinioClient minioClient) {
        this.minioClient = minioClient;
    }

    private static final String DEFAULT_BUCKET_NAME = "default";
    private static final String DEFAULT_ENDPOINT = "http://127.0.0.1:9000";
    private static final String DEFAULT_ACCESSKEY = "minioadmin";
    private static final String DEFAULT_SECRETKEY = "minioadmin";

    // 创建 default bucket
    public void createDefaultBucket() {
        if (!isBucketExist(DEFAULT_BUCKET_NAME)) {
            try {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(DEFAULT_BUCKET_NAME).build());
            } catch (Exception e) {
                throw new RuntimeException("创建默认存储桶失败: " + DEFAULT_BUCKET_NAME);
            }
        }
    }

    // 查看 bucket 是否存在
    public boolean isBucketExist(String bucketName) {
        try {
            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            return false;
        }
    }

    // 上传文件到默认 bucket
    public void putString(String fileName, String content) {
        try {
            var bytes = content.getBytes(StandardCharsets.UTF_8);
            var metadata = new ObjectMetadata();
            metadata.setContentType(MediaType.TEXT_PLAIN_VALUE);
            metadata.setContentLength(bytes.length);
            var stream = new ByteArrayInputStream(bytes);
            var arg = PutObjectArgs.builder().bucket(DEFAULT_BUCKET_NAME).object(fileName).stream(stream, bytes.length, -1)
                .contentType(MediaType.TEXT_PLAIN_VALUE).build();
            minioClient.putObject(arg);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    // 下载一个文件到字符串
    public String getObjectAsString(String fileName) {
        try {
            var obj = minioClient.getObject(GetObjectArgs.builder().bucket(DEFAULT_BUCKET_NAME).object(fileName).build());
            var inputStream = obj.readAllBytes();
            return new String(inputStream, StandardCharsets.UTF_8);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

以上代码实现了一个 MinioService 服务类,我们可以向其中注入 MinioClient,并提供以下方法:

  • createDefaultBucket() 方法会检查 default bucket 是否存在,如果不存在,则创建一个 default bucket;
  • isBucketExist(String bucketName) 方法会查询指定名称的 bucket 是否存在;
  • putString(String fileName, String content) 方法会将字符串 content 上传到指定的 bucket;
  • getObjectAsString(String fileName) 方法会从 bucket 中下载指定的文件,并返回其内容的字符串。

使用该服务类的示例代码如下:

@RestController
@RequestMapping("/api/minio")
public class MinioExampleController {
    private final MinioService minioService;

    public MinioExampleController(MinioService minioService) {
        this.minioService = minioService;
    }

    @GetMapping("/echo/{id}")
    public String echo(@PathVariable String id) {
        minioService.createDefaultBucket();
        minioService.putString("echo", id);

        return minioService.getObjectAsString("echo");
    }
}

以上代码创建一个使用 Spring Boot 框架的 REST 接口服务,/api/minio/echo/{id} 路由接受一个参数 id。它调用 MinioServicecreateDefaultBucket() 方法,确保存储桶存在。然后使用 MinioServiceputString("echo", id) 方法将 id 存储为字符串。接下来使用 getObjectAsString("echo") 方法从存储桶中获取存储的字符串。最后返回获取的结果。

第二个示例代码

该示例代码展示了如何使用 Minio 实现文件的上传和下载操作。首先我们需要使用 MinioClient 客户端连接到 minio 服务器。

MinioClient minioClient = MinioClient.builder()
   .endpoint(endpoint)
   .credentials(accessKey, secretKey)
   .build();

以上代码创建了一个新的 MinioClient,其中包含了 minio 服务器的 IP、AK、SK 等信息。

  1. 文件上传

使用以下代码将文件上传到 Minio。

public void putObject(String bucketName, String objectName, String filePath, String contentType) throws IOException, InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, InvalidKeyException, NoResponseException, ErrorResponseException, InternalException, InvalidArgumentException, RegionConflictException {
    File file = new File(filePath);
    try {
        File file1 = new File(filePath);
        FileInputStream fis = new FileInputStream(file1);
        ObjectMetadata meta = new ObjectMetadata();
        meta.setContentType(contentType);
        PutObjectRequest request = new PutObjectRequest(bucketName, objectName, fis, meta);
        minioClient.putObject(request);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  1. 文件下载

使用以下代码从 Minio 下载文件。

public void getObject(String bucketName, String objectName, String path) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, NoResponseException, ErrorResponseException, InternalException, InvalidArgumentException {
    File file = new File(path);
    minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build(), file.toPath());
}

在以上示例代码中,上传和下载文件时都要指定存储桶的名称,也要指定文件的名称,因此我们首先需要在 Minio 上创建一个存储桶。

minioClient.makeBucket(MakeBucketArgs.builder().bucket("download").build());

以上代码将在 Minio 上创建一个名称为 download 的存储桶。

我们可以使用以下示例代码将文件上传到 Minio 上。

String bucketName = "download";
String objectName = "demo.txt";
String filePath = "D:/webgl/three-js-first-demo/guid.js";
String contentType = "text/plain";
minioService.putObject(bucketName, objectName, filePath, contentType);

以上示例代码将本地文件 D:/webgl/three-js-first-demo/guid.js 上传到 Minio 存储桶 download 中,并给文件取名为 demo.txt

接下来,我们可以使用以下示例代码从 Minio 上下载文件。

String bucketName = "download";
String objectName = "demo.txt";
String filePath = "D:/demo.txt";
minioService.getObject(bucketName, objectName, filePath);

以上示例代码从 Minio 存储桶 download 中下载文件 demo.txt 并存储到本地的文件 D:/demo.txt

至此,这两个示例代码就完成了上传文件和下载文件的操作。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot 使用 minio的示例代码 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • SpringBoot底层注解详解

    首先,我们需要了解SpringBoot的底层注解。SpringBoot是基于Spring框架的,都是使用注解来进行配置的。下面详细介绍几个重要的底层注解: @SpringBootApplication 这个注解是SpringBoot的核心注解,它的作用是将三个注解组合在一起,这三个注解分别是:@Configuration,@EnableAutoConfigu…

    Java 2023年5月19日
    00
  • hibernate4快速入门实例详解

    Hibernate4快速入门实例详解 Hibernate是一个基于Java语言的ORM(Object-Relational Mapping)框架,它可以把Java类和关系数据库中的表进行映射,从而可以通过面向对象的方式来操作数据库,使得数据库操作变得更简单、更高效。本文将详细讲解如何快速入门Hibernate4,并提供两个示例说明。 步骤一:环境搭建 在开始…

    Java 2023年6月15日
    00
  • 实例详解Android 获取短信会话列表

    实例详解Android 获取短信会话列表 为什么需要获取短信会话列表 在我们的日常生活中需要经常使用手机发送和接收短信,而对于一些需要短信的应用程序来说,获取短信会话列表是很有必要的,比如备份短信、导出短信等等。因此,本文将介绍获取Android短信会话列表的方法。 实现步骤 1. 添加权限 首先,在AndroidManifest.xml文件中添加权限: &…

    Java 2023年5月23日
    00
  • SpringBoot配置嵌入式Servlet容器和使用外置Servlet容器的教程图解

    下面是详细讲解 SpringBoot 配置嵌入式 Servlet 容器和使用外置 Servlet 容器的教程图解。 嵌入式Servlet容器 Spring Boot 内置了常用的嵌入式 Servlet 容器,如 Tomcat、Jetty、Undertow 等。开发者不需要手动配置这些容器,只需要在项目中添加相应的依赖即可。 配置 Tomcat 添加 Tomc…

    Java 2023年6月15日
    00
  • java中mybatis和hibernate的用法总结

    Java中MyBatis和Hibernate的用法总结 1. MyBatis的用法示例 1.1. 配置MyBatis数据源 在MyBatis中使用数据源需要在项目的配置文件mybatis-config.xml中进行配置。下面以配置MySQL连接为例进行说明。 <!– 配置数据源 –> <dataSource type="POO…

    Java 2023年5月20日
    00
  • 使用JAVA通过ARP欺骗类似P2P终结者实现数据封包监听

    首先需要明确的是,ARP欺骗是指通过伪造ARP响应的方式,诱导受害者将数据包发送至攻击者的电脑,从而实现数据封包监听、拦截等攻击行为。下面给出使用Java实现ARP欺骗的攻略过程。 1. 获取受害者电脑的MAC地址 要实现ARP欺骗的攻击,首先需要获取受害者电脑的MAC地址。可以通过以下代码实现: InetAddress address = InetAddr…

    Java 2023年6月15日
    00
  • Spring数据源及配置文件数据加密实现过程详解

    下面详细讲解“Spring数据源及配置文件数据加密实现过程详解”的完整攻略。 一、背景知识 在实际开发中,因为涉及个人隐私信息,我们需要对数据库的账号和密码进行加密,以避免被恶意攻击者盗取。本文将探讨如何使用Spring对数据源及配置文件数据进行加密的实现过程。 二、Spring数据源的配置 1. 配置文件 首先,我们需要在Spring的配置文件中对数据源进…

    Java 2023年6月3日
    00
  • 详解java.lang.NumberFormatException错误及解决办法

    详解java.lang.NumberFormatException错误及解决办法 在Java编程中,如果出现数字字符串转换为数字类型时出现错误,就会抛出一个NumberFormatException异常。这种错误通常是由于尝试将一个无效的字符串转换为数字类型引起的。在本文中,我们将详细了解这个常见错误的原因和解决办法,并提供两个示例说明其中的一个常见场景。 …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部