本文出自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. Eclipse远程调试Java代码的三种方法

    Eclipse远程调试Java代码的三种方法, 第1种方法是用来调试已经启动的Java程序,Eclipse可以随时连接到远程Java程序进行调试, 第2种方法可以调试Java程序启动过程,但是Ecli ...

  2. ActiveMQ基础教程(一):认识ActiveMQ

    ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...

  3. 前端必备,5大mock省时提效小tips,用了提前下班一小时

    ​ 一.一些为难前端的业务场景 在我的工作经历里,需要等待后端童鞋配合我的情形大概有以下几种: a.我们跟外部有项目合作,需要调用到第三方接口. 一般这种情况下,商务那边谈合同,走流程,等第三方审核, ...

  4. STL(1)vector

    STL(1) 1.vector vector是vector直译为"向量",一般说成"变长数组",也就是长度根据需要而自动改变的数组,有些题目需要开很多数组,往往 ...

  5. Java--Map的使用认知

    Java里面的Map是一个抽象接口,有一些类实现的该接口比如HashMap.TreeMap等 HashMap 是一个散列表,存储的内容是靠键值对来映射的(key-value). 基本认识 HashMa ...

  6. python @property用法(转载)

    偶然碰到一篇讲解 @property 比较清晰的文章 记录下来 日常复习 # @property'''@property是python的一种装饰器,是用来修饰方法的 作用:我们可以使用@propert ...

  7. solr -window 安装与启动

    1.下载 官网路径   https://solr.apache.org/downloads.html 为了稳定,我用 5.4.1 版本的 ,   这是下载地址 https://archive.apac ...

  8. 读取 properties 配置文件含有中文的value内容 导致中文乱码 的解决办法

    1.前言 因为装系统的时候把中文写在了系统路径,现在我想把这个路径写在properties里面来读取,可是 发现java 读取会导致中文乱码成 问号????的乱码  ,百度找了好多博客,基本都是一摸一 ...

  9. x86-3-段式管理(segmentation)

    x86-3-段式管理(segmentation) 3.1 段式管理概述: 从8086CPU开始,为了让程序在内存中能自由浮动而又不影响它的正常执行,CPU将内存划分成逻辑上的段来给程序使用. x86继 ...

  10. EF4中多表关联查询Include的写法

    大家好,好久没有写作了,最近遇到了个问题,最终是靠自己的尝试写出来的,希望可以帮到有需要的人. 在我们查询时通常会遇到多级表关联的情况,很多时候有人会想写一个from LINQ语句来解决,那么冗长的代 ...