配置
这里只有部分配置,官网的全面
官网:https://www.minio.io/
服务端
win
minio下载
账户:minioadmin
密码:minioadmin
路径/minio.exe server 存储路径 --console-address ":控制台端口"
宝塔 Docker图形化管理器
推荐文章(更加全面):dochub + minio + 宝塔面板(基于CentOS)+ docker 搭建 ,提供http,https
下载 Docker管理器
获取镜像 minio/minio
添加服务器公网IP
添加容器
绑定IP选择服务器公网IP
参考路径
/data
/root/minio/us/data
账号密码
MINIO_ROOT_USER=账号
MINIO_ROOT_PASSWORD=密码(最少8位)
执行命令(9001为控制台端口)
server /data --console-address ":9001"
客户端
Maven
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.2</version>
</dependency>
案例
简单的工具类封装
public class MinioUtils {
private static MinioClient minioClient;
static {
minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin", "minioadmin").build();
}
public static void createBucket(String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
// 先判断桶是否存在,不存在则创建
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
}
/**
* 上传文件
*
* @param bucketName 桶的名称
* @param remotePath 远程要上传的文件路径
* @param localPath 本地文件路径
*/
public static void upload(String bucketName, String remotePath, String localPath) throws IOException, ServerException, InsufficientDataException, ErrorResponseException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(remotePath).filename(localPath).build());
}
/**
* 上传文件
*
* @param bucketName 桶的名称
* @param remotePath 远程文件路径
* @param downloadPath 本地保存文件路径
*/
public static void download(String bucketName, String remotePath, String downloadPath) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
minioClient.downloadObject(DownloadObjectArgs.builder().bucket(bucketName).object(remotePath).filename(downloadPath).build());
}
}
常用API
创建 MinioUtils
MinioUtils minioClient = MinioClient.builder().endpoint("http://127.0.0.1:9000").credentials("minioadmin", "minioadmin").build();
判断桶是否存在,存在返回true,反之
minioClient.bucketExists(BucketExistsArgs.builder().bucket(桶名).build())
创建桶
minioClient.makeBucket(MakeBucketArgs.builder().bucket(桶名).build());
上传本地文件
minioClient.uploadObject(UploadObjectArgs.builder().bucket(桶名).object(远程文件路径).filename(本地文件路径).build());
上传输入流
minioClient.putObject(PutObjectArgs.builder().bucket(桶名).object(远程文件路径).stream(inputStream(文件输入流), objectSize(文件长度), partSize(-1为读到末尾,正数为读到对应的地方)).contentType(文件类型(multipartFile.getContentType())).build());
下载远程文件
minioClient.downloadObject(DownloadObjectArgs.builder().bucket(桶名).object(远程文件路径).filename(本地文件路径).build());
下载远程输入流
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(桶名).object(远程文件路径).build());
获取远程路径下所有文件信息
返回一个含有所有文件信息的迭代器
Iterable<io.minio.Result<io.minio.messages.Item>> iterable = minioClient.listObjects(ListObjectsArgs.builder().bucket(桶名).prefix(远程文件路径(末尾+/)).build());
遍历迭代器
iterable.forEach(itemResult -> {
try {
// Helper class to denote Object information in ListBucketResultV1, ListBucketResultV2 and ListVersionsResult.
// 翻译:Helper类,用于表示ListBucketResultV1、ListBucketResultV2和ListVersionsResult中的对象信息。
Item item = itemResult.get();
// 远程文件路径
item.objectName();
// 文件长度
item.size();
// 去掉前缀(目录),只保留文件名称
String filename = StringUtils.getFilename(item.objectName());
} catch (Exception e) {
throw new RuntimeException(e);
}
});
public Iterable<io.minio.Result<io.minio.messages.Item>> listObjects(
io.minio.ListObjectsArgs args
)