天天看点

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的文件系统的文件下载到本地。

继续阅读