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. Java集合(类)框架(二)

    1.Set集合 1.1 HashSet集合 HashSet底层为哈希码 不是数组,因此没有下标的概念,也就不能根据下标来查询某个元素 存放元素无序,不可重复 1.1.1 声明 Set<Strin ...

  3. Docker(2)- Centos 7.x 下安装 Docker

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 虚拟机安装 centos ...

  4. 【原创】ARM平台内存和cache对xenomai实时性的影响

    目录 1. 问题概述 2. stress 内存压力原理 2. cache 因素 2.1 未加压 2.2 加压(cpu/io) 3. 内存管理因素 3.1 内存分配/释放 3.2 MMU拥塞 4 总结 ...

  5. 转载-Eclipse无法打开Eclipse MarketPlace的解决办法

    问题描述: Eclipse点击 help-->Eclipse MarketPlace 后无任何反应,无报错,打不开 解决方法: 重新安装一下 epp MarketPlace help--> ...

  6. 1.深入Istio:Sidecar自动注入如何实现的?

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Istio源码是 release 1.5. 这篇文章打算讲一下sidecar, ...

  7. 2020年的UWP(3)——UWP和desktop extension的简单交互

    上一篇<2020年的UWP(2)--In Process App Service>中我们了解了UWP和Desktop Extension可以通过AppService进行数据交互.本篇我们就 ...

  8. python_udp_多人聊天室_简单版

    udp-一定是client端先发送数据. server.py import socket friend_lst = {'alex':'32','太白':'33'} sk =socket.socket( ...

  9. 解决calamari无法获取节点信息的bug

    前言 一直在做calamari的相关的一些打包和安装的工作,都是业余弄的东西,所以并没有仔细的进行功能点的验证测试,正好ceph社区群里面有人问了个问题 calamari上是不是能看到ceph的ver ...

  10. HTTP 报文格式简介

    HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送 WWW 方式的数据,关于 HTTP 协议的详细内容请参考 RFC2616.HTTP 协议采用了请求/响 ...