Springboot3 + Minio + 腾讯混元助手 做一个网盘(一)

2023-09-22 20:33:27 浏览数 (2)

准备

  • Spring Boot 3.2.0 (SNAPSHOT)
  • JDK 21
  • Minio RELEASE.2023-09-07

补充知识

介绍一下minio介绍一下minio
核心概念:

Bucket:这部分助手的回答还是上图这个,所以我自己来回答一下

Bucket 英文直译就是桶,就开发角度来说,一个用户有多个桶,每个桶存放不同类型的数据。这就像你的c盘放系统,D盘放学习资料,E盘放开发工程一样。当然也可以都放一个盘。

一. 初始化

从0开始搭建环境,AIGC辅助生产。

1.1 Spring boot初始化

在写文章的此刻,JDK 21还不可选,所以选20之后手动改

基础选项基础选项

Spring Web为了直接测试。

Devtools为了热重启

下载完zip包,更改pom文件

代码语言:html复制
	<properties>
		<java.version>21</java.version>
	</properties>

1.2 Minio初始化

使用时国内网站有bug,手动更改URL标签后缀。比如kubernetes -> docker 也可以使用原站

选择你习惯的版本,我选的docker的方式。

官方这里其实少了一步骤,run之前应该先在docker desktop拉取一下。

windows 终端 服务端 启动指令
代码语言:shell复制
podman run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"

客户端/连接端

非必须

代码语言:shell复制
podman run --name my-mc --hostname my-mc -it --entrypoint /bin/bash --rm minio/mc

WSL窗口 基本属性

代码语言:shell复制
[root@my-mc /]# mc alias set myminio/ https://my-minio-service MY-USER MY-PASSWORD
[root@my-mc /]# mc ls myminio/mybucket

官方提供的Minio SDK

代码语言:html复制
    <dependency>
        <groupId>io.minio</groupId>
        <artifactId>minio</artifactId>
        <version>8.4.3</version>
    </dependency>

非官方的statr(列举一个)

代码语言:html复制
    <dependency>
      <groupId>com.jvm123</groupId>
      <artifactId>minio-spring-boot-starter</artifactId>
      <version>1.2.1</version>
    </dependency>

启动一下康康

日志

代码语言:shell复制
2023-09-21 21:33:03 Status:         1 Online, 0 Offline. 
2023-09-21 21:33:03 S3-API: http://172.17.0.2:9000  http://127.0.0.1:9000 
2023-09-21 21:33:03 Console: http://172.17.0.2:9090 http://127.0.0.1:9090

web管理后台

Minio 后台Minio 后台

密码没有手动设置、或者忘了的话,看这里

账号密码账号密码

输入正确之后,来到真的管理控制台,整体像腾讯云COS。

Minio ConsoleMinio Console

关于控制台更多详细请看:Minio console

1.3 助手指导

非docker交给腾讯混元助手

windows 创建并启动 Miniowindows 创建并启动 Minio

答案很标准,md的格式也显示的没有错误。就是现在没有网页端只能截图有点遗憾。

二. 编写工具类

因为上边出色的表现,现在完全引导他来编写

点击下方的更多灵感,切换成代码生成器

代码生成器代码生成器

这些灵感就是预设一些额外的提示,使得回答模型更精确专业一些。

接下来,我的问题是:在spring boot环境写一个minio的增删改查的工具。

工具类工具类

可以看到,不仅有了代码,还补充了一些基础信息(没有看到),最后还有配置文件。

代码语言:java复制
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;

@Component
public class MinioUtil {

    private final MinioClient minioClient;

    public MinioUtil(@Value("${minio.endpoint}") String endpoint,
                      @Value("${minio.accessKey}") String accessKey,
                      @Value("${minio.secretKey}") String secretKey) {
        this.minioClient = MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }

    public boolean createBucket(String bucketName) {
        try {
            minioClient.makeBucket(bucketName);
            return true;
        } catch (MinioException | IOException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean deleteBucket(String bucketName) {
        try {
            minioClient.removeBucket(bucketName);
            return true;
        } catch (MinioException | IOException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            return false;
        }
    }

    public boolean putObject(String bucketName, String objectName, byte[] content) {
        try {
            minioClient.putObject(bucketName, objectName, content, "application/octet-stream");
            return true;
        } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
            return false;
        }
    }

    public byte[] getObject(String bucketName, String objectName) {
        try {
            return minioClient.getObject(bucketName, objectName);
        } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
            return null;
        }
    }

    public boolean deleteObject(String bucketName, String objectName) {
        try {
            minioClient.removeObject(bucketName, objectName);
            return true;
        } catch (MinioException | IOException | NoSuchAlgorithmException e) {
            e.printStackTrace();
            return false;
        }
    }
}

整体过关,就是少了注释。

三. 小结

项目到这里算是一个demo,目前还没前端调用,不过简单功能实现了。

满分10分,助手打8分吧。有些词理解的还不是很准确,但各种领域应用还是展示的很到位的。


我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞