Minio 是什么
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
docker 下载Minio 镜像
1. 拉取镜像
docker pull minio/minio
2. 启动
docker run -p 9000:9000 --net=host --name minio -d --restart=always -v /usr/src/docker/data/docker-minio:/data minio/minio server /data
3. 查看 minio 的秘钥
docker logs minio
访问liunx主机加端口:http://192.168.149.101:9000 跳转到minio web 页面,密码为 刚刚 docker logs minio 查询出来秘钥
创建一个令牌桶用于存放文件
在bucket name 输入令牌的名称 点击create bucker 就创建好一个令牌桶
springboot 整合 minio
导入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.0.2</version>
</dependency>
编写配置文件
server.port=8081
minio.endpoint=http://192.168.149.101:9000
minio.accessKey=minioadmin
minio.secretKey=minioadmin
minio.bucketName=images
编写配置文件 实体类
@Component
@AllArgsConstructor
@Data
@ConfigurationProperties(prefix = "minio")
@NoArgsConstructor
public class MinioProperties {
private String endpoint;
/**
* Access key就像用户ID,可以唯一标识你的账户
*/
private String accessKey;
/**
* Secret key是你账户的密码
*/
private String secretKey;
/**
* 文件桶的名称
*/
private String bucketName;
}
编写minio 配置类
@Configuration
public class MinioConfig {
@Autowired
private MinioProperties properties;
@Bean
public MinioClient minioClient(){
MinioClient minioClient = null;
try {
minioClient = new MinioClient(properties.getEndpoint(), properties.getAccessKey(), properties.getSecretKey());
} catch (InvalidEndpointException | InvalidPortException e) {
e.printStackTrace();
}
return minioClient;
}
}
编写minio 工具类
@Component
public class MinioUtils {
@Autowired
private MinioProperties properties;
@Autowired
private MinioClient minioClient;
public String upload(MultipartFile file){
try {
// 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
// 检查存储桶是否已经存在
boolean isExist = minioClient.bucketExists(properties.getBucketName());
if (!isExist) {
// 创建一个名为test的存储桶,用于存储照片的zip文件。
minioClient.makeBucket(properties.getBucketName());
}
InputStream inputStream = file.getInputStream();
// 使用putObject上传一个文件到存储桶中。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String time = System.currentTimeMillis()+".jpg";
// 设置存储对象名称
String objectName = sdf.format(new Date()) + "/" + time;
minioClient.putObject(properties.getBucketName(), objectName, inputStream, new PutObjectOptions(inputStream.available(), -1));
//关闭
inputStream.close();
return properties.getEndpoint()+"/"+properties.getBucketName()+"/"+objectName;
} catch (MinioException | NoSuchAlgorithmException | IOException | InvalidKeyException | java.security.InvalidKeyException e) {
System.out.println("Error occurred: " + e);
return "";
}
}
}
编写文件上传 controller
@RestController
public class FileController {
@Autowired
private MinioUtils minioUtils;
@PostMapping(value = "/upload")
public String upload(@RequestParam("file") MultipartFile file) {
String upload = minioUtils.upload(file);
return upload;
}
}
使用 postman 上传文件
minio 控制台查看刚刚上传文件
设置image 令牌桶 文件可以被外部可访问
点击buckets 页面 Manage 按钮 进入令牌桶设置页面
设置访问规则,点击Access Rules 标签添加 访问规则,显示规则对方框
在对话框里面添加配置规则
可以通过htttp://{localhost}:{port}/{buckets}/文件名进行访问
<image src="http://192.168.149.101:9000/images/20220303/1646291359974.jpg"></image>