前面我已经部署了Windows Server 环境下的 MinIO文件服务器,由于公司使用的是Java语言,接下来测试下Java SDK的使用情况。如果大家还不知道怎么部署MinIO文件服务器,可以看上篇Windows Server 部署MinIO作为文件储存服务器。
一、创建一个Java本地项目
我是使用的IDEA开发工具,这里以IDEA的流程来描述:
1、新建项目,选择maven作为生成器,Archetype使用org.apache.maven.archetypes:maven-archetype-quickstart,点击创建等待项目创建完成。
创建界面
创建后的目录结构
二、使用maven引入Java SDK,pom.xml内容如下。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.1</version>
</dependency>
</dependencies>
</project>
三、代码实现
1、PutObject接口测试
代码如下:
package org.example.demo;
import io.minio.*;
import io.minio.errors.MinioException;
import javax.crypto.KeyGenerator;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
public class PutObject {
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
MinioClient minioClient = MinioClient.builder()
.endpoint("http://***.com:9000")
.credentials("admin", "12345678")
.build();
String bucketName = "public";
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
minioClient.uploadObject(UploadObjectArgs.builder()
.bucket(bucketName)
.object("test\\3.jpg")
.filename("C:\\Users\\27797\\Desktop\\temps\\壁纸图片\\3.jpg")
.build());
System.out.println("my-objectname is uploaded successfully");
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
}
注意:
endpoint 填写的端口是9000,不是9001。我这里9001是console的端口,很多刚开始使用的人喜欢直接复制控制台的地址。这样会一致报错:S3 API Requests must be made to API port.
credentials 建议使用Access Keys中的创建的key,直接使用控制账号密码权限存在隐患。这里使用Access Key的话,注意配置相应的Policy。
object 是上传到服务器桶下的路径。
filename 是本地文件的路径。
上述一切正常的话会在相应桶的路径下上传文件成功。我这里如下图:
可以在线预览查看下上传的图片是否正常,点击文件后选择右边的Preview.
至此已将本地文件成功的上传到MinIO的文件系统。
2、GetObject接口测试
代码如下:
package org.example.demo;
import io.minio.DownloadObjectArgs;
import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class GetObject {
public static void main(String[] args) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
try {
MinioClient minioClient = MinioClient.builder()
.endpoint("http://devminio.haoweiyun.com.cn:9000")
.credentials("admin", "12345678")
.build();
minioClient.downloadObject(DownloadObjectArgs.builder()
.bucket("public")
.object("test/3.png")
.filename("C:\\Users\\27797\\Desktop\\temps\\壁纸图片\\3.png")
.build());
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
}
同样注意:
endpoint 填写的端口是9000,不是9001。
credentials 建议使用Access Keys中的创建的key。
object 是MinIO服务器中文件的路径。
filename是下载到本地保存文件的路径。
上述代码运行,下载成功后查看本地的图片是否正常。
至此已成功的将MinIO的文件系统的文件下载到本地。