MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。
minio 安装
windows 下安装
下载二进制文件
minio.exe server D:\Photos
D:\Photos minio中文件存储的位置 可以自定义
docker 中运行
拉取镜像
docker pull minio/minio
运行镜像
docker run -v /data/minio:/data -p 9000:9000 minio/minio server /data
安装后使用浏览器访问http://127.0.0.1:9000,如果可以访问,则表示minio已经安装成功。
初始密码会在服务启动时打印出来
springboot 整合minio
<!-- minio -->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.2.0</version>
</dependency>
package com.code.report.blog.infra.util;
import io.minio.*;
import io.minio.errors.*;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
/**
* @author zhaotianxin
* @date 2021-04-19 17:19
*/
@Component
public class MinioClientUtil implements InitializingBean {
@Value("${minio.endPoint}")
private String endPoint;
@Value("${minio.user}")
private String user;
@Value("${minio.pass}")
private String pass;
private MinioClient minioClient;
public MinioClientUtil() {
}
@Override
public void afterPropertiesSet() throws Exception {
minioClient = MinioClient.builder().endpoint(endPoint).credentials(user, pass).build();
}
public boolean bucketExists(String bucketName){
try {
return minioClient.bucketExists(BucketExistsArgs.builder().bucket("bucketName").build());
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void createBucketName(String bucketName){
if(!bucketExists(bucketName)){
try {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public String uploadFile(MultipartFile file, String bucketName) throws Exception {
//判断存储桶是否存在 不存在则创建
createBucketName(bucketName);
//文件名
String originalFilename = file.getOriginalFilename();
//新的文件名 = 存储桶文件名_时间戳.后缀名
String fileName = bucketName + "_" +
System.currentTimeMillis() +
originalFilename.substring(originalFilename.lastIndexOf("."));
//开始上传
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(file.getInputStream(),file.getSize(), -1)
.build();
ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
String url = "/" + bucketName + "/" + fileName;
return url;
}
}