MinIO 是一个非常轻量的基于 Apache License v2.0 开源协议的对象存储服务。它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。

一、MinIO 服务部署

1.1 下载安装包

本文使用 CentOS 7,安装包地址(中国镜像):http://dl.minio.org.cn/server/minio/release/linux-amd64/minio

1.2 启动服务

chmod +x minio
./minio server /project/miniodata/

其中 /project/miniodata/ 是文件存储位置,默认端口是 9000,AccessKey 和 SecretKey 均为 minioadmin

也可以手动指定端口号:

./minio server --address :9001 /project/miniodata/

也可以手动修改 AccessKey 和 SecretKey:

vi /etc/profile

#在最后添加内容
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=password # 然后执行命令
source /etc/profile

二、Java SDK 使用

2.1 新建项目添加配置

minio:
url: http://192.168.137.101:9000
accessKey: minioadmin
secretKey: minioadmin spring:
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB

2.2 上传、下载、文件分享代码

@RestController
public class MinioController { @Autowired
private MinioProperties minioProperties; @PostMapping("/upload")
public String upload(UploadModel uploadModel) { if(StringUtils.isEmpty(uploadModel.getFileName())) {
uploadModel.setFileName(uploadModel.getFile().getOriginalFilename());
} try {
// 使用 MinIO 服务的 IP:PORT,Access key 和 Secret key 创建一个 MinioClient 对象
MinioClient minioClient = new MinioClient(
minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); // 检查存储桶是否已经存在
boolean isBucketExist = minioClient.bucketExists(uploadModel.getBucket());
if(!isBucketExist) {
minioClient.makeBucket(uploadModel.getBucket());
} PutObjectOptions putObjectOptions = new PutObjectOptions(uploadModel.getFile().getSize()
, uploadModel.getFile().getSize() >= 5242880L ? uploadModel.getFile().getSize() : 0L); minioClient.putObject(uploadModel.getBucket(), uploadModel.getFileName(),
uploadModel.getFile().getInputStream(), putObjectOptions); } catch (Exception e) {
return e.getMessage();
}
return "success";
} @RequestMapping("/download")
public ResponseEntity<Resource> download(DownloadModel downloadModel) {
try {
MinioClient minioClient = new MinioClient(
minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); InputStream inputStream = minioClient.getObject(downloadModel.getBucket(), downloadModel.getFileName());
Resource resource = new InputStreamResource(inputStream);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=\"" +
downloadModel.getFileName().replace('/', '-') + "\"")
.body(resource);
} catch (Exception e) {
return null;
}
} @RequestMapping("/share")
public String share(DownloadModel downloadModel) {
try {
MinioClient minioClient = new MinioClient(
minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey()); String url = minioClient.presignedGetObject(downloadModel.getBucket(), downloadModel.getFileName(), 120);
return url;
} catch (Exception e) {
return e.getMessage();
}
}
}

新建一个 Bucket 就是在文件路径新建一个目录,默认上传的文件都在该 Bucket 的根目录,如果要存储多级目录,可以指定在文件名中指定目录结构,如:img/avatar.jpg

注意校正 MinIO 服务器时间,否则可能会报错:

Caused by: io.minio.errors.ErrorResponseException: The difference between the request time and the server's time is too large.

完整代码:GitHub

参考:MinIO 中文文档

MinIO的更多相关文章

  1. 我是如何让minio client上传速度提高几十倍的

    minio java client 使用okhttp作为底层的http实现,在产品包里面局域网上传文件的速度一直只有400~800KB/s,经过一天排查发现是-Djava.compile=none禁用 ...

  2. 使用s3fs-fuse 挂载minio s3 对象存储

    minio 是一个aws s3 兼容的对象存储系统,我们可以通过s3fs 进行数据桶的挂载,这样可以做好多方便的事情 环境准备 使用docker-compose 运行 minio docker-com ...

  3. [转]从minio中读取文件流进行下载文件

    本文转自:https://blog.csdn.net/ZHANGLIZENG/article/details/82892678 一.获取Minio连接    public static String ...

  4. [转]Build An Image Manager With NativeScript, Node.js, And The Minio Object Storage Cloud

    本文转自:https://www.thepolyglotdeveloper.com/2017/04/build-image-manager-nativescript-node-js-minio-obj ...

  5. minio golang client使用

    初始化 var ( endpoint = "127.0.0.1:8888" accessKeyID = "YXU5IXETKKPX171K4Z6O" secre ...

  6. 轻量对象存储服务——minio

    minio Minio是一个非常轻量的对象存储服务. Github: minio 它本身不支持文件的版本管理.如果有这个需求,可以用 s3git 搭配使用. Github: s3git 安装 mini ...

  7. 使用openresty && minio && thumbor 构建稳定高效的图片服务器

    备注: minio 是一个开源的s3 协议兼容的分布式存储,openresty nginx+lua 高性能可扩展的nginx 衍生版,thumbor 基于python 的图片处理服务器,支持图片的裁剪 ...

  8. 安装 Minio服务

    #MINIO SERVER Minio是在Apache License v2.0下发布的对象存储服务器.它与Amazon S3云存储服务兼容. 它最适合存储非结构化数据,如照片,视频,日志文件,备份和 ...

  9. minio上传大于30M文件失败

    minio上传30M文件失败.提示失败或者进度不动.翻查手册发现并未限速.原因是使用了nginx做代理.上传超过30M大的客户端文件无法正常上传,修改了下nginx的配置,就可以了. 加上client ...

  10. MInio python

    # Install Minio library. # $ pip install minio # # Import Minio library. from minio import Minio # I ...

随机推荐

  1. Java-GUI基础(一)

    简介 首先,Java的学习就是不断学习一个个包与类的过程,对于GUI部分有两个核心包:java.awt与javax.swing, 这两个包可以说是涵盖了java的GUI部分所有的类(和他们的方法). ...

  2. docker部署redis主从和哨兵

    docker部署redis主从和哨兵 原文地址:https://www.jianshu.com/p/72ee9568c8ea 1主2从3哨兵 一.前期准备工作 1.电脑装有docker 2.假设本地i ...

  3. linux + MongoDB 安装 + 部署 + 讲解 (满满干货看完记得收藏噢)

    话不多说开始了! 安装 安装就依据菜鸟教程的进行安装 传送门 => https://www.runoob.com/mongodb/mongodb-linux-install.html 好啦!现在 ...

  4. 2.while循环

    while循环 #-*- coding: utf-8-*- #指定识别utf-8的字符串 1.while循环以及跳出循环 while True: #无限循环 print('i love pyhon') ...

  5. 使用LSV进行通视分析教程

    在LSV"分析"菜单栏中点击"通视分析" 在地面或者建筑物表面选择一点,然后鼠标移动到另一个位置点击结束,即可判断出两点间是否有障碍物,是否可见.通视分析结果显 ...

  6. PriorityQueue原理分析——基于源码

    在业务场景中,处理一个任务队列,可能需要依照某种优先级顺序,这时,Java中的PriorityQueue(优先队列)便可以派上用场.优先队列的原理与堆排序密不可分,可以参考我之前的一篇博客: 堆排序总 ...

  7. Mongodb和Hbase的对比

    Mongodb和Hbase的对比 1.Mongodb bson文档型数据库,整个数据都存在磁盘中,hbase是列式数据库,集群部署时每个familycolumn保存在单独的hdfs文件中. 2.Mon ...

  8. epoll内核源码详解(转 作者:赛罗·奥特曼 来源:牛客网)

    发现自己发的一篇面经后,很多小伙伴向我索要epoll的内核源码实现,那我就在牛客网发下这源码还有自己总结的流程. 另外 网上很多博客说epoll使用了共享内存,这个是完全错误的 ,可以阅读源码,会发现 ...

  9. 借助boost bind/function来实现基于对象编程。

    boost bind/function库的使用: 替换了stl中mem_fun,bind1st,bin2nd等函数.用户注册回调函数需要利用boost/bind转化成库中boost/function格 ...

  10. ubuntu掉电出现检查文件系统的问题

    修改: /etc/default/rcS FSCKFIX=no 为 FSCKFIX=yes 出现这个情况的原因是硬件时钟偏移了 显示上次挂载根目录在未来时间. 写于: 2013年11月28日 更新于: ...