Java 管理 MinIO 对象

下载对象(getObject)

以流的形式下载一个对象。方法声明如下:

public InputStream getObject(String bucketName, String objectName)
public InputStream getObject(String bucketName, String objectName, ServerSideEncryption sse)
public InputStream getObject(String bucketName, String objectName, long offset)
public InputStream getObject(String bucketName, String objectName, long offset, Long length)
public InputStream getObject(String bucketName, String objectName, Long offset, Long length, ServerSideEncryption sse)

其中:

  • bucketName:存储桶名称

  • objectName:存储桶里的对象名称

实例:获取 MinIO 服务中 files 存储桶中名为 images.zip 的对象,将对象写入到本地磁盘上。代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import java.io.*;

/**
 * 从服务器获取对象
 * @author Administrator 2021/7/20 13:25
 * @version 1.0
 */
public class GetObject {
    /** MinioClient.getObject() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            InputStream inputStream = minioClient.getObject("files",
                    "images.zip");
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
            BufferedOutputStream outputStream = new BufferedOutputStream(
                    new FileOutputStream("C:\\Users\\Administrator\\Desktop\\images.zip"));
            byte[] bytes = new byte[2048];
            int len;
            while((len = bufferedInputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, len);
            }

            bufferedInputStream.close();
            outputStream.close();

            System.out.println("finished.");
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

上传对象(putObject)

通过 InputStream 上传对象到 MinIO 存储桶。方法声明如下:

public void putObject(String bucketName, String objectName, String filename, PutObjectOptions options)
public void putObject(String bucketName, String objectName, InputStream stream, PutObjectOptions options)

其中:

  • bucketName:存储桶名称

  • objectName:存储桶里的对象名称

  • filename:待上传文件的名称/路径

  • stream:待上传文件的流对象

  • options:上传对象可选对象,设置对象大小等

实例:将本地文件上传到 my-bucketname 存储桶,代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.errors.MinioException;
import java.io.ByteArrayInputStream;

/**
 * 上传对象到服务器
 * @author Administrator 2021/7/20 13:25
 * @version 1.0
 */
public class PutObject {
    /** MinioClient.putObject() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            {
                // 为对象上传创建一个 InputStream。
                ByteArrayInputStream inputStream = new ByteArrayInputStream(
                        "hello world".getBytes("UTF-8"));
                // 使用输入流中的内容在 my-bucketname 中创建对象 my-objectname
                minioClient.putObject(
                        "my-bucketname", "my-objectname", inputStream,
                        new PutObjectOptions(inputStream.available(),-1));
                inputStream.close();
                System.out.println("my-objectname is uploaded successfully");
            }

            {
                // 将本地文件上传到 my-bucketname 存储桶
                minioClient.putObject("my-bucketname", "my-objectname2",
                        "D:\\tmp\\images.zip", null);
                System.out.println("my-objectname2 is uploaded successfully");
            }

        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

复制对象(copyObject)

用来将指定的 MinIO 存储桶中的对象拷贝到指定位置。方法声明如下:

public void copyObject(
      String bucketName,
      String objectName,
      Map<String, String> headerMap,
      ServerSideEncryption sse,
      String srcBucketName,
      String srcObjectName,
      ServerSideEncryption srcSse,
      CopyConditions copyConditions)

其中:

  • srcBucketName:源存储桶名称

  • srcObjectName:源存储桶中的源对象名称

  • bucketName:目标存储桶名称

  • objectName:要创建的目标对象名称,如果为空,默认为源对象名称

  • copyConditions:拷贝操作的一些条件Map

  • headerMap:用户元数据

  • sse:目标对象的 SSE-C 类型服务器端加密

  • srcSse:源对象的 SSE-C 类型服务器端加密

实例:将 files 存储桶中的 images.zip 对象拷贝到 my-bucketname 存储桶下的 images.zip 对象,代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.errors.MinioException;

/**
 * 复制对象 copyObject
 * @author Administrator 2021/8/5 12:33
 * @version 1.0
 */
public class CopyObject {
    /** MinioClient.copyObject() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 将 files 存储桶中的 images.zip 对象拷贝到 my-bucketname 存储桶下的 images.zip 对象
            minioClient.copyObject("my-bucketname", "images.zip",
                    null, null, "files",
                    "images.zip", null, null);

            System.out.println("copy finished.");
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

删除对象(removeObject)

删除一个对象。方法声明如下:

public void removeObject(String bucketName, String objectName)
public Iterable<Result<DeleteError>> removeObjects(
      final String bucketName, final Iterable<String> objectNames)

其中:

  • bucketName:存储桶名称

  • objectName:存储桶里的对象名称

  • objectNames:批量删除对象的列表

实例:从 files 存储桶中删除或批量删除对象,代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.DeleteError;

import java.util.Arrays;
import java.util.Iterator;

/**
 * 删除指定对象
 * @author Administrator 2021/8/5 12:45
 * @version 1.0
 */
public class RemoveObject {
    /** MinioClient.removeObject() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 删除 files 存储桶中的 images.zip 对象
            minioClient.removeObject("files", "images.zip");

            // 删除多个对象
            String[] objectNames = { "221595.jpg", "221425.jpg", "221406.jpg" };
            Iterable<Result<DeleteError>> results = minioClient.removeObjects("files", Arrays.asList(objectNames));
            Iterator<Result<DeleteError>> iterator = results.iterator();
            while(iterator.hasNext()) {
                Result<DeleteError> result = iterator.next();
                System.out.println(result.get());
            }

            System.out.println("remove successful");
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

删除不完整对象(removeIncompleteUpload)

删除一个未完整上传的对象。方法声明如下:

public void removeIncompleteUpload(String bucketName, String objectName)

其中:

  • bucketName:存储桶名称

  • objectName:存储桶里的对象名称

实例:从 files 存储桶中删除未上传完的 images.zip 对象,代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.errors.MinioException;

/**
 * 删除上传未完成的对象
 * @author Administrator 2021/8/5 12:54
 * @version 1.0
 */
public class RemoveIncompleteUpload {
    /** MinioClient.removeIncompleteUpload() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 删除 files 存储桶中未上传完的 images.zip 对象
            minioClient.removeIncompleteUpload("files", "images.zip");
            System.out.println("remove successful");
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}

获取对象元数据(statObject)

获取对象的元数据。方法声明如下:

public ObjectStat statObject(String bucketName, String objectName)
public ObjectStat statObject(String bucketName, String objectName, ServerSideEncryption sse)

其中:

  • bucketName:存储桶名称

  • objectName:存储桶里的对象名称

  • sse:SSE-C 类型的服务器端加密。

实例:获取 files 存储桶中的 images.zip 对象元数据,代码如下:

package com.hxstrive.minio.demos.object;

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.errors.MinioException;

/**
 * 获取对象的元数据
 * @author Administrator 2021/8/5 12:42
 * @version 1.0
 */
public class StatObject {
    /** MinioClient.statObject() example. */
    public static void main(String[] args) throws Exception {
        try {
            MinioClient minioClient = new MinioClient(
                    "http://127.0.0.1:9000",
                    "root", "mypassword");

            // 获取 files 存储桶中的 images.zip 对象元数据
            ObjectStat objectStat = minioClient.statObject(
                    "files", "images.zip");

            System.out.println("bucketName: " + objectStat.bucketName());
            System.out.println("contentType: " + objectStat.contentType());
            System.out.println("etag: " + objectStat.etag());
            System.out.println("name: " + objectStat.name());
            System.out.println("length: " + objectStat.length());
        } catch (MinioException e) {
            e.printStackTrace();
        }
    }
}
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号