1.MinIO简介
MinIO 是一个开源的对象存储服务,它提供了一个可扩展的分布式文件系统,用于存储和检索任意类型的数据。MinIO 旨在为云原生应用程序提供快速、可靠和成本效益高的存储服务,并支持多种数据格式和协议,如Amazon S3 API。
2. 在docker上部署minio
关于docker上的部署这篇讲解很详细,大家可以参考
http://t.csdnimg.cn/FWT1Yhttp://t.csdnimg.cn/FWT1Y
3. minio的基本使用
3.1 创建bucket
3.2 上传文件(打开bucket的右边)
4. 使用Java代码实现minIO
4.1 引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.8.1</version>
</dependency>
4.2 上传文件、删除文件、下载文件的代码
@SpringBootTest
class MinioDemoApplicationTests {
// 创建一个MinioClient实例,用于与MinIO服务器的交互
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.92.136:9000") // MinIO服务器的地址
.credentials("minioadmin","minioadmin") // MinIO服务的访问凭证
.build();
// 上传文件
@Test
void testUpload() throws Exception {
// 创建上传文件的参数信息
UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
.bucket("testbucket") // 指定上传到哪个桶
.filename("C:\\Users\\haoge\\Pictures\\9780fe1eaa34499fa37f560e6f9a2818_1507729237.png") // 本地文件的路径
.object("9780fe1eaa34499fa37f560e6f9a2818_1507729237.png") // 在MinIO中存储的文件名
.build();
// 使用MinioClient上传文件
minioClient.uploadObject(uploadObjectArgs);
}
// 删除文件
@Test
void testDelete() throws Exception{
// 创建删除文件的参数信息
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder()
.bucket("testbucket") // 指定从哪个桶删除
.object("9780fe1eaa34499fa37f560e6f9a2818_1507729237.png") // 要删除的文件名
.build();
// 使用MinioClient删除文件
minioClient.removeObject(removeObjectArgs);
}
// 下载文件
@Test
void testGetFile() throws Exception{
// 创建获取文件的参数信息
GetObjectArgs getObjectArgs = GetObjectArgs.builder()
.bucket("testbucket") // 指定从哪个桶获取文件
.object("9780fe1eaa34499fa37f560e6f9a2818_1507729237.png") // 要获取的文件名
.build();
// 使用MinioClient获取文件的输入流
FilterInputStream inputStream = minioClient.getObject(getObjectArgs);
// 创建本地文件的输出流
FileOutputStream outputStream = new FileOutputStream(new File("D:\\1.png"));
// 使用IOUtils的copy方法将输入流中的数据复制到输出流中,即写入到本地文件
IOUtils.copy(inputStream, outputStream);
//校验文件的完整性对文件内容进行md5
FileInputStream fileInputStream1 = new FileInputStream(new File("D:\\1.png"));
String sourceMd5 = DigestUtil.md5Hex(fileInputStream1);
FileInputStream fileInputStream2 = new FileInputStream(new File("D:\\1.png"));
String localMd5 = DigestUtil.md5Hex(fileInputStream2);
if(sourceMd5.equals(localMd5)){
System.out.println("下载成功!");
}
}
}