Table of contents
Install MinIO
official website
MinIO | High performance, Kubernetes-native object storage
Install and use under Win:
MinIO | Code and downloads for creating high-performance object storage
put it in one place
easy to use
We create 4 folders to simulate a distributed system.
Open a terminal/command line in this directory
Run the command as follows:
.\minio.exe server F:\data1 F:\data2 F:\data3 F:\data4
Open incoming connection
The default username and password are both minioadmin
Landed successfully
Create a new file bucket
created successfully
click on this bucket
Test file upload
success
use in JAVA
Create a SpringBoot project
add the dependencies
<!-- 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>
Remember the address of the command line output
remember bucket name
getting Started
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);
}
}
run code
Check
specify file type
Add dependency files
<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>
File Upload
test code
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); } }
Check
The internal extensions have those, as follows
result
Will definitely overwrite the previously uploaded Blastoise photo
Download Document
//查询文件 从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);
}
delete
//删除文件
@Test
public void testDelete() throws Exception {
//RemoveObjectArgs
RemoveObjectArgs removeObjectArgs = RemoveObjectArgs
.builder()
.bucket("myvideo")
.object("水箭龟.png")
.build();
//删除文件
minioClient.removeObject(removeObjectArgs);
}