MinIO
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的更多相关文章
- 我是如何让minio client上传速度提高几十倍的
minio java client 使用okhttp作为底层的http实现,在产品包里面局域网上传文件的速度一直只有400~800KB/s,经过一天排查发现是-Djava.compile=none禁用 ...
- 使用s3fs-fuse 挂载minio s3 对象存储
minio 是一个aws s3 兼容的对象存储系统,我们可以通过s3fs 进行数据桶的挂载,这样可以做好多方便的事情 环境准备 使用docker-compose 运行 minio docker-com ...
- [转]从minio中读取文件流进行下载文件
本文转自:https://blog.csdn.net/ZHANGLIZENG/article/details/82892678 一.获取Minio连接 public static String ...
- [转]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 ...
- minio golang client使用
初始化 var ( endpoint = "127.0.0.1:8888" accessKeyID = "YXU5IXETKKPX171K4Z6O" secre ...
- 轻量对象存储服务——minio
minio Minio是一个非常轻量的对象存储服务. Github: minio 它本身不支持文件的版本管理.如果有这个需求,可以用 s3git 搭配使用. Github: s3git 安装 mini ...
- 使用openresty && minio && thumbor 构建稳定高效的图片服务器
备注: minio 是一个开源的s3 协议兼容的分布式存储,openresty nginx+lua 高性能可扩展的nginx 衍生版,thumbor 基于python 的图片处理服务器,支持图片的裁剪 ...
- 安装 Minio服务
#MINIO SERVER Minio是在Apache License v2.0下发布的对象存储服务器.它与Amazon S3云存储服务兼容. 它最适合存储非结构化数据,如照片,视频,日志文件,备份和 ...
- minio上传大于30M文件失败
minio上传30M文件失败.提示失败或者进度不动.翻查手册发现并未限速.原因是使用了nginx做代理.上传超过30M大的客户端文件无法正常上传,修改了下nginx的配置,就可以了. 加上client ...
- MInio python
# Install Minio library. # $ pip install minio # # Import Minio library. from minio import Minio # I ...
随机推荐
- Java入门(4)
阅读书目:Java入门经典(第7版) 作者:罗格斯·卡登海德 面向对象编程(OOP)将程序视为对象的集合,确定程序要完成的任务,然后将这些任务指派给最适合完成它们的对象.换言之,计算机程序是一组对象, ...
- CF957E Contact ATC
二维偏序(逆序对) 因为风速vf,-w<=vf<=w,因此我们可以算出每一艘船到达原点的时间的取值范围 即取vf=w和vf=-w时,记ai为当vf=w时的用时,记bi为当vf=-w时的用时 ...
- Mongoose Guide(转)
转自:http://www.w3c.com.cn/mongoose-guide Queries 文件可以通过一些静态辅助模型的方法检索. 任何涉及 指定 查询 条件的模型方法,有两种执行的方式: 当一 ...
- C++变量的存储类型
C++变量和函数包括两个属性:数据类型和数据的存储类型.存储类型是指数据在内存中存储的方式.变量的存储类型分为四种:自动类型(auto),寄存器类型(register).静态类型(static)外部类 ...
- 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常
自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...
- Elasticsearch(6):文档查询
为方便后续查询演示,我们先创建一个索引.创建索引请求如下:
- [读书笔记] Python语言及其应用
记录下秋招期间看的一本Python工具书<Python语言与其应用>,查漏补缺,部分内容整理如下: 易混淆概念 1.1 删除 - del,remove()和pop() 1.2 复制 - 浅 ...
- 面试官:Redis 主从复制时网络开小差了怎么整?
上周因为实在太忙就认认真真写了一篇水文,吹了一下自己过去的经历,反响竟然超出了我的预期,并且后台还有读者留言表示想看续集的.哈哈,果然大家还是对水文更有热情. 这期我们继续回到之前的 Redis 话题 ...
- C++调用Go方法的字符串传递问题及解决方案
摘要:C++调用Go方法时,字符串参数的内存管理需要由Go侧进行深度值拷贝. 现象 在一个APP技术项目中,子进程按请求加载Go的ServiceModule,将需要拉起的ServiceModule信息 ...
- 源码分析:ReentrantReadWriteLock之读写锁
简介 ReentrantReadWriteLock 从字面意思可以看出,是和重入.读写有关系的锁,实际上 ReentrantReadWriteLock 确实也是支持可重入的读写锁,并且支持公平和非公平 ...