目录
安装MinIO
官网
MinIO | 高性能, Kubernetes 原生对象存储
Win下安装使用:
把它放在一个地方
简单使用
我们创建4个文件夹模拟分布式系统。
在此目录打开终端/命令行
运行命令如下:
.\minio.exe server F:\data1 F:\data2 F:\data3 F:\data4
打开命来中的连接
默认的用户名和密码都是minioadmin
登陆成功
新建一个文件桶
创建成功
点击这个桶
测试文件上传
成功
在JAVA中使用
创建一个SpringBoot项目
加入一下的依赖
<!-- Spring Boot 集成 Junit -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 分布式文件系统-->
<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>
记住命令行输出的地址
记住桶名
入门
package com.scm;
import io.minio.MinioClient;
import io.minio.UploadObjectArgs;
import io.minio.errors.*;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class MinIOTest {
// 构建MinIo客户端
MinioClient minioClient =
MinioClient.builder()
.endpoint("http://192.168.0.18:9000")
.credentials("minioadmin", "minioadmin")
.build();
@Test
public void TestFileUpload() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
//构建上传对象
UploadObjectArgs file = UploadObjectArgs
.builder()
//桶名
.bucket("myvideo")
//本地文件路径
.filename("B:\\suijiangui.png")
//上传后的对象名
.object("水箭龟.png")
.build();
//上传
minioClient.uploadObject(file);
}
}
运行代码
查看
指定文件类型
添加依赖文件
<dependencies>
<!-- spring web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!--根据扩展名取mimetype-->
<dependency>
<groupId>com.j256.simplemagic</groupId>
<artifactId>simplemagic</artifactId>
<version>1.17</version>
</dependency>
<!-- Spring Boot 集成 Junit -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 分布式文件系统-->
<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>
</dependencies>
文件上传
测试代码
package com.scm; import com.j256.simplemagic.ContentInfo; import com.j256.simplemagic.ContentInfoUtil; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import io.minio.errors.*; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import java.io.IOException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class MinIOTest { // 构建MinIo客户端 MinioClient minioClient = MinioClient.builder() .endpoint("http://192.168.0.18:9000") .credentials("minioadmin", "minioadmin") .build(); @Test public void TestFileUpload() throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException { String fileName="B:\\suijiangui.png"; //通过扩展名得到媒体资源类型 mimeType //根据扩展名取出mimeType ContentInfo extensionMatch = ContentInfoUtil.findExtensionMatch(fileName); //如果没获取到扩展名则设置为默认的-通用mimeType,字节流 String mimeType = extensionMatch!=null ?extensionMatch.getMimeType() :MediaType.APPLICATION_OCTET_STREAM_VALUE;; System.out.println("文件类型为:"+mimeType); //构建上传对象 UploadObjectArgs file = UploadObjectArgs .builder() //桶名 .bucket("myvideo") //本地文件路径 .filename(fileName) //文件扩展名 .contentType(mimeType) //上传后的对象名 .object("水箭龟.png") .build(); //上传 minioClient.uploadObject(file); } }
查看
内部的扩展名都有那些,如下
结果
肯定会覆盖以前上传的水箭龟照片的
文件下载
//查询文件 从minio中下载
@Test
public void test_getFile() throws Exception {
GetObjectArgs getObjectArgs = GetObjectArgs
.builder()
.bucket("myvideo")
.object("水箭龟.png")
.build();
//查询远程服务获取到一个流对象
FilterInputStream inputStream = minioClient.getObject(getObjectArgs);
//指定输出流
FileOutputStream outputStream = new FileOutputStream(new File("B:\\我是下载的文件.png"));
IOUtils.copy(inputStream,outputStream);
}
删除
//删除文件
@Test
public void testDelete() throws Exception {
//RemoveObjectArgs
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs
.builder()
.bucket("myvideo")
.object("水箭龟.png")
.build();
//删除文件
minioClient.removeObject(removeObjectArgs);
}