准备
- Spring Boot 3.2.0 (SNAPSHOT)
- JDK 21
- Minio RELEASE.2023-09-07
补充知识
核心概念:
Bucket:这部分助手的回答还是上图这个,所以我自己来回答一下
Bucket 英文直译就是桶,就开发角度来说,一个用户有多个桶,每个桶存放不同类型的数据。这就像你的c盘放系统,D盘放学习资料,E盘放开发工程一样。当然也可以都放一个盘。
一. 初始化
从0开始搭建环境,AIGC辅助生产。
1.1 Spring boot初始化
在写文章的此刻,JDK 21还不可选,所以选20之后手动改
Spring Web为了直接测试。
Devtools为了热重启
下载完zip包,更改pom
文件
<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管理后台
密码没有手动设置、或者忘了的话,看这里
输入正确之后,来到真的管理控制台,整体像腾讯云COS。
关于控制台更多详细请看:Minio console
1.3 助手指导
非docker交给腾讯混元助手
答案很标准,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腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表