零一开源—技术|科技|资源分享 零一开源—技术|科技|资源分享

技术分享与兴趣交流

目录
Minio分布式对象存储Java操作示例
/  

Minio分布式对象存储Java操作示例

上期有给大家介绍如何分布式安装Minio服务,本期将着重给大家介绍Java如何操作Minio,供大家学习参考。

Java SDK

官网介绍:

适用于与Amazon S3兼容的云存储的MinIO Java SDK。
MinIO Java Client SDK提供简单的API来访问任何与Amazon S3兼容的对象存储服务。

官网文档地址:https://docs.min.io/cn/java-client-quickstart-guide.html

最低需求

Java 1.8或更高版本:

  • OracleJDK 8.0
  • OpenJDK8.0

创建Maven项目

Maven项目创建不太会的同学请自行百度学习,这里不再赘述

引入依赖

在官网官方文档上可以看到官方的依赖版本是比较低的,猜测应该是很久没更新。下面是官方文档提供的依赖:

<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>

这里先不理他,我这里的示例deomo项目,是使用的SpringJUnit4测试,所以除了minio依赖,也依赖了spring的必须报,完整的pom文件依赖如下:

<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version>4.3.4.RELEASE</spring.version>
	</properties>

	<dependencies>
		<!-- springframe start -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 数据库访问封装 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring-web -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- spring-webmvc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- springframe end -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!--minio文件服务器 -->
		<dependency>
			<groupId>io.minio</groupId>
			<artifactId>minio</artifactId>
			<version>7.0.2</version>
		</dependency>
	</dependencies>

配置文件

src/main/resources/application-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:task="http://www.springframework.org/schema/task" 
	   xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-4.1.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
            http://www.springframework.org/schema/task 
            http://www.springframework.org/schema/task/spring-task-4.1.xsd">

  
	<context:component-scan base-package="com.yunzin">

	</context:component-scan>

</beans>

项目启动测试类

src/test/java/com/yunzin/AppTest

几个参数说明

参数说明
Endpoint对象存储服务的URL
Access KeyAccess key就像用户ID,可以唯一标识你的账户。
Secret KeySecret key是你账户的密码。

其中Access Key,Secret Key则是上一期中run.sh文件中配置的对应值

同时还需注意的是,在上传文件之前,需要先创建好bucketName,不然会上传失败。

文件上传测试类代码:

package com.yunzin;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import io.minio.MinioClient;
import io.minio.PutObjectOptions;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:application-context.xml" })
public class AppTest {

	/**
	 * 连接url
	 */
	private static String endpoint = "http://47.102.117.62:9000";
	/**
	 * 用户名
	 */
	private static String accesskey = "minio";
	/**
	 * 密码
	 */
	private static String secretKey = "minio#@!";

	private static String bucketName = "test";

	@Test
	public void testUploadFile() {
		File file = new File("D:\\test.jpeg");

		// 获取文件的真实名称
		String orgfileName = file.getName();
		try {
			// 获取文件的输入流信息
			InputStream in = new FileInputStream(file);
			PutObjectOptions options = new PutObjectOptions(file.length(), -1);
			// 上传到文件服务器:桶key,文件名,文件的io信息
			minioClient().putObject(bucketName, orgfileName, in, options);
		
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	public static MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
		return new MinioClient(endpoint, accesskey, secretKey);
	}

}

以上测试方法成功执行后,登录到服务器地址,就可以看到刚刚上传的文件。

其他API

具体的内容可以查看官网介绍:https://docs.min.io/docs/java-client-api-reference

操作存储桶

  • makeBucket
  • listBuckets
  • bucketExists
  • removeBucket
  • listObjects
  • listIncompleteUploads

操作文件对象

  • getObject
  • putObject
  • copyObject
  • statObject
  • removeObject
  • removeIncompleteUpload

Presigned操作

  • presignedGetObject
  • presignedPutObject
  • presignedPostPolicy

操作存储桶策略

  • getBucketPolicy
  • setBucketPolicy

了解更多


标题:Minio分布式对象存储Java操作示例
作者:hacken
地址:https://www.01open.com/articles/2022/01/14/1642167823831.html