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 ...
随机推荐
- UML类图关系表示
UML 之 C++类图关系全面剖析 分类: 软件设计与架构2008-10-16 08:52 5165人阅读 评论(3) 收藏 举报 umlc++borderclasscblog UML的类图关系分为: ...
- 八位“Booth二位乘算法”乘法器
目录 八位"Booth二位乘算法"乘法器 原理 补码乘法器 Booth一位乘 Booth二位乘 设计思路 减法变加法 vivado特性 设计文件 综合电路 测试文件 仿真波形 八位 ...
- IL角度理解for 与foreach的区别——迭代器模式
IL角度理解for 与foreach的区别--迭代器模式 目录 IL角度理解for 与foreach的区别--迭代器模式 1 最常用的设计模式 1.1 背景 1.2 摘要 2 遍历元素 3 删除元素 ...
- Spring Boot 2.4.0 正式发布!全新的配置处理机制,拥抱云原生!
2020年11月12日,Spring官方发布了Spring Boot 2.4.0 GA的公告. 在这个版本中增加了大量的新特性和改进,下面我们一起看看在这个重要版本中都有哪些值得关注的内容! 更新内容 ...
- Netlink 内核实现分析 2
netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...
- [LeetCode题解]83. 删除排序链表中的重复元素 | 递归 + 迭代
方法一:递归 解题思路 通过递归法,每次判断目前头节点与给定的节点是否相等.如是,继续判断下一个节点,否则保存当前头节点,设置 next 指向下次递归得到的节点,然后返回当前节点. 代码 /** * ...
- Java 微信端评论表情处理
1,工具包下载:https://github.com/vdurmont/emoji-java 2,文本保存时处理:EmojiParser.parseToHtmlHexadecimal(str) 3,文 ...
- redis源码学习之slowlog
目录 背景 环境说明 redis执行命令流程 记录slowlog源码分析 制造一条slowlog slowlog分析 1.slowlog如何开启 2.slowlog数量限制 3.slowlog中的耗时 ...
- 【开源】.net微服务开发引擎Anno开源啦
1.Anno是什么? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可监控.依赖第三方框架少.底层通讯RPC(Remote Procedure Call)采用稳定可靠经过无数成功项 ...
- 网页中审查元素(按F12)与查看网页源代码的区别
问题 在验证目标系统是含有XSS漏洞,查看源代码,看不到插入的跨站脚本代码. 原理 所谓查看源代码,就是别人服务器发送到浏览器的原封不动的代码. 审查元素时,你看到那些,在源代码中找不到的代码,是在浏 ...