天天看點

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

作者:那年o2016

前面我已經部署了Windows Server 環境下的 MinIO檔案伺服器,由于公司使用的是Java語言,接下來測試下Java SDK的使用情況。如果大家還不知道怎麼部署MinIO檔案伺服器,可以看上篇Windows Server 部署MinIO作為檔案儲存伺服器。

一、建立一個Java本地項目

我是使用的IDEA開發工具,這裡以IDEA的流程來描述:

1、建立項目,選擇maven作為生成器,Archetype使用org.apache.maven.archetypes:maven-archetype-quickstart,點選建立等待項目建立完成。

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

建立界面

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

建立後的目錄結構

二、使用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 是本地檔案的路徑。

上述一切正常的話會在相應桶的路徑下上傳檔案成功。我這裡如下圖:

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

可以線上預覽檢視下上傳的圖檔是否正常,點選檔案後選擇右邊的Preview.

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

至此已将本地檔案成功的上傳到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是下載下傳到本地儲存檔案的路徑。

上述代碼運作,下載下傳成功後檢視本地的圖檔是否正常。

Java SDK 測試MinIO檔案伺服器的上傳、下載下傳接口

至此已成功的将MinIO的檔案系統的檔案下載下傳到本地。

繼續閱讀