本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html

MinIO是一个对象存储服务,非常轻量,也提供了多种语言的api,可以非常方便使用。

存储桶

minio中的bucket桶

MinIO将存储空间分为多个部分,称为bucket桶,文件(对象)就存储在各个bucket桶中

桶策略

这些bucket桶可以根据用户的需要进行创建和删除。此外可以对每个bucket桶设置匿名用户访问的策略,具体策略说明如下:

  • ReadOnly – 允许匿名下载访问包括能够列出所需前缀的对象
  • WriteOnly – 允许匿名上传包括能够列出所需前缀的不完整上传
  • 读写 – 匿名访问以上载和下载所有对象
  • 无 – 是默认值(无策略),这意味着所有操作都需要针对所需的存储桶和前缀进行身份验证

Java Api

依赖:

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

java api 通过一个http客户端进行存储和获取对象文件,所以java代码中可以通过以下的步骤进行存储和获取:

1 实例化一个MinioClient客户端:

MinioClient minioClient = new MinioClient(endpoint, accessKey, secretKey);

2 创建存储桶bucket:

            String bucket = "demo-bucket";
boolean isExist = minioClient.bucketExists(bucket);
if(isExist) {
LOGGER.info("Bucket {} already exists.", bucket);
} else {
minioClient.makeBucket(bucket);
}

3 存储文件对象(需要指定存储的桶):

minioClient.putObject(bucket, destFileName, file.getAbsolutePath());

因为MinioClient使用http客户端,并不是长连接,所以不需要进行关闭连接和释放资源的操作。

至此,文件已经存储完毕,可以在Minio服务器查询看到,bucket中的文件

4 获取对象文件如下(获取输入流InputStream):


public InputStream getStream(String bucket, String fileName) {
InputStream is = null;
try {
MinioClient minioClient = ...; // 再实例化一个客户端
is = minioClient.getObject(bucket, fileName);
} catch(MinioException | NoSuchAlgorithmException | IOException | XmlPullParserException | InvalidKeyException e) {
LOGGER.error("error: {}", e.getMessage());
}
return is;
}

如果需要获取File对象:

    public File getFile(String bucket, String fileName) {
InputStream is = getStream(bucket, fileName);
File dir = new File(tmpDir);
if (!dir.exists() || dir.isFile()) {
dir.mkdirs();
}
File file = new File(tmpDir + fileName);
try {
FileUtils.copyToFile(is, file);
} catch (IOException e) {
e.printStackTrace();
}
return file;
}

如果需要下载文件,可以直接将输入流写入servlet输出流即可:

public void writeTo(String bucket, String fileName, OutputStream os) throws IOException {
InputStream is = getStream(bucket, fileName);
byte[] bytes = new byte[1024];
int len;
while ((len = is.read(bytes)) != -1) {
os.write(bytes, 0, len);
}
os.flush();
}
 

MinIO简介和java Api的使用的更多相关文章

  1. Phoenix简介概述,Phoenix的Java API 相关操作优秀案例

    Phoenix简介概述,Phoenix的Java API 相关操作优秀案例 一.Phoenix概述简介 二.Phoenix实例一:Java API操作 2.1 phoenix.properties 2 ...

  2. java安全沙箱(四)之安全管理器及Java API

    java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...

  3. Spark基础与Java Api介绍

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3832405.html  一.Spark简介 1.什么是Spark 发源于AMPLab实验室的分布式内存计 ...

  4. 详解Java API之正则表达式

    正则表达式描述的是一种规则,符合这种限定规则的字符串我们认为它某种满足条件的,是我们所需的.在正则表达式中,主要有两种字符,一种描述的是普通的字符,另一种描述的是元字符.其中元字符是整个正则表达式的核 ...

  5. [搜索]ElasticSearch Java Api(一) -添加数据创建索引

    转载:http://blog.csdn.net/napoay/article/details/51707023 ElasticSearch JAVA API官网文档:https://www.elast ...

  6. Java密码体系结构简介:Java Cryptography Architecture (JCA) Reference Guide

    来自Java官方的文档,作备忘使用. 简介: Java平台非常强调安全性,包括语言安全,密码学,公钥基础设施,认证,安全通信和访问控制. JCA是平台的一个主要部分,包含一个“提供者”体系结构和一组用 ...

  7. SuperMap iServer 扩展/JAVA API 系列博客整理

    转载:http://blog.csdn.net/supermapsupport/article/details/70158940 SuperMap iServer为广大用户提供了整套 SDK,应用开发 ...

  8. ZooKeeper(二)Java API使用

    ZooKeeper官网提供了Java和C的API. 本文使用Java API来实现ZooKeeper的基本操作. 前言 下图中的Replicated Database是包含完整数据树(entire d ...

  9. Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

    elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介.Java REST Client.Java Client.Spri ...

随机推荐

  1. SpringCloud使用汇总Config

    1.Config Server对外提供的资源格式 配置中心的HTTP服务有5种资源格式: /{application}/{profile}[/{label}] /{application}-{prof ...

  2. PostgreSQL客户端psql常用命令

    使用psql客户端访问数据库, 列出了psql常用命令和参数. 常用命令 -- 使用指定用户和IP端口登陆 psql -h 10.43.159.11 -p 5432 -U postgres -W -- ...

  3. Java中的对象、类、抽象类、接口的理解

    1.对象 对象是个具体的东西,有着明确的属性特征和行为特征. 例如:你手上牵着的女朋友或男朋友就是个具体的对象. 如图中的苏格兰折耳猫,特征是耳朵向下呈折叠状,有着具体的颜色(你看到的颜色),并且和其 ...

  4. shell3-循环

    常用的循环语句有3种: <1>for <2>while <3>utile 1.for语句的格式: for 变量名 in 列表: do 循环体 done 如何生成列表 ...

  5. centos6.5-搭建mysql5.7.9

    1.msyql5.7.9编译及安装   cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.7.9 -DMYSQL_DATADIR=/data/mysql5. ...

  6. 微服务架构攀登之路(四)之使用gRPC构建微服务

    做一个处理用户信息的微服务 客户端通过用户名,可以从服务端查询用户的基本信息 gRPC proto user.proto 定义客户端请求.服务端响应的数据格式 user.pb.go 自动生成的,为数据 ...

  7. Java 异常分析

    Java 异常分析 本文是对以下内容的分析: Java异常设计 Java 异常分类 Java异常可以告诉什么问题 Java异常处理最佳实践 Java Exception 是为了处理应用程序的异常行为而 ...

  8. Python多环境管理神器(Anaconda)

    为了解决python多版本共存,解决不同版本之间的依赖冲突,虚拟环境隔离等问题,我们前面介绍了venv.virtualenv.virtualenvwrapper.pyenv.pipenv等众多工具.下 ...

  9. Android官方文档翻译 十三 3.1Supporting Different Languages

    Supporting Different Languages 支持不同语言 This class teaches you to 这节课教给你 Create Locale Directories and ...

  10. leetcode 264. 丑数 II 及 313. 超级丑数

    264. 丑数 II 题目描述 编写一个程序,找出第 n 个丑数. 丑数就是只包含质因数 2, 3, 5 的正整数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, ...