Minio 是个基于 Golang 编写的开源对象存储套件,基于Apache License v2.0开源协议,虽然轻量,却拥有着不错的性能。
它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL等。
下载 (官网:https://min.io/ )
cd /tmp wget https://dl.min.io/server/minio/release/linux-amd64/minio
创建安装目录,设置账号密码
mkdir -p /home/minio/data chmod +x minio cp minio /home/minio/data export MINIO_ACCESS_KEY=minioadmin export MINIO_SECRET_KEY=minioadmin
启动服务
#启动,该启动为前台启动 ./minio server /home/minio/data # 后台启动,默认端口方式 9000 nohup ./minio server /home/minio/data > /home/minio/data/minio.log 2>&1 & #后台启动,自定义端口方式 nohup ./minio server /home/minio/data --address=0.0.0.0:9009 >/home/minio/data/minio.log 2>&1 &
查看服务是否启动成功
ps -ef | grep minio
访问服务,根据实际情况修改IP和端口
http://192.168.206.22:9000
创建存储桶
配置存储桶公开访问
默认配置下,访问存储桶是需要请求授权的。但是在实际场景下,我们往往希望允许直接访问。所以我们要把访问规则(Access Policy)设置为:Public 。这样我们就可以直接访问了,文件的访问地址的格式为 <http://IP:Port/{bucket}/{fileName}>。
注意 端口已实际启动端口为准。
例如:http://192.168.206.22:9000/test/wallhaven-p989gm_1920x1080.png
MinIO Java Client SDK提供简单的API来访问任何与Amazon S3兼容的对象存储服务。
官方demo: https://github.com/minio/minio-java
官方文档:https://min.io/docs/minio/linux/developers/java/API.html
新版 MinIO和旧版在 API使用上还是有一定的区别,比如:新版 MinIO采用 Builder构建者模式来构造 MinioClient对象。所以,官方demo仅供参考,尽量查看英文官方文档。
引入依赖
<dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.5.4</version> </dependency>
编写HelloWorld程序
package com.example.demo; import io.minio.BucketExistsArgs; import io.minio.MakeBucketArgs; import io.minio.MinioClient; import io.minio.UploadObjectArgs; import java.util.UUID; public class MinioTest { public static void main(String[] args) { try { // 初始化连接 MinioClient minioClient = MinioClient.builder() .endpoint("http://192.168.206.22:9000") .credentials("hPnrX1KRjXqwE2Ef3rXE", "AJwbFRMFtzbrKe5bUlNdD5jR5RYwS5q2lw08GVvk") // 直接用密码也可以,不建议 // .credentials("minioadmin", "minioadmin") .build(); String bucketName = "test"; // 检查存储桶是否存在,不存在则创建 boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); if (!found) { minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build()); } else { System.out.println("存储桶 " + bucketName + " 已存在."); } // 上传文件到桶 minioClient.uploadObject( UploadObjectArgs.builder() .bucket(bucketName) // 指定桶 .object(UUID.randomUUID() + ".jpg") // 文件在桶里面名字,防止冲突用UUID命名 .filename("D:\\Temp\\HD00001.jpg") // 文件路径 .build()); System.out.println("上传成功"); } catch (Exception e) { e.printStackTrace(); } } }
其他使用示例,参考官方
Java小强
未曾清贫难成人,不经打击老天真。
自古英雄出炼狱,从来富贵入凡尘。
发表评论: