前面我已經部署了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的檔案系統的檔案下載下傳到本地。