1、执行docker命令下载镜像
docker pull minio/minio
2、执行安装命令
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name minio \
--restart=always \
-e "MINIO_ROOT_USER=xxx" \
-e "MINIO_ROOT_PASSWORD=xxx" \
-v /mydata/minio/data:/data \
-v /mydata/minio/config:/root/.minio \
minio/minio \
server /data \
--console-address ":9090"
3、命令解释:
-d:后台运行容器(detach模式)。
-p 9000:9000:将容器的 9000 端口映射到主机的 9000 端口。
-p 9090:9090:将容器的 9090 端口映射到主机的 9090 端口(用于管理控制台)。
--name minio:给容器指定一个名字,方便管理。
--restart=always:配置容器在 Docker 重启后自动重启。
-e "MINIO_ROOT_USER=xxx":设置 MinIO 的根用户。
-e "MINIO_ROOT_PASSWORD=xxx":设置 MinIO 的根用户密码。
-v /mydata/minio/data:/data:将主机的 /mydata/minio/data 目录挂载到容器的 /data 目录,用于存储 MinIO 数据。
-v /mydata/minio/config:/root/.minio:将主机的 /mydata/minio/config 目录挂载到容器的 /root/.minio 目录,用于配置存储。
minio/minio:指定使用的镜像。
server /data:告诉 MinIO 服务器使用 /data 目录作为数据目录。
--console-address ":9090":指定 MinIO 控制台的监听地址和端口。
4、java使用
1、引入依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.5.12</version>
</dependency>
2、putObject上传文件
创建配置类
/**
* @Author: js
* @Date: 2024/8/22
* 配置类,读取minio配置信息
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private String endpoint;//ip+端口
private String accessKey;//账号
private String secretKey;//密码
private String bucketName;//存储桶名称
}
上传代码
//构建minioClient
MinioClient minioClient = MinioClient.builder()
.endpoint(minioProperties.getEndpoint())
.credentials(minioProperties.getAccessKey(), minioProperties.getSecretKey())
.build();
// 判断有没有桶,没有就创建,
boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProperties.getBucketName()).build());
if (!found) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProperties.getBucketName()).build());
}
//模拟获取文件
File file = new File("C:/Users/双歌/Desktop/图片/11.jpg");
FileInputStream files = new FileInputStream(file);
//封装文件名称
String[] split = file.getName().split("\\.");
String replace = UUID.randomUUID().toString().replace("-", "");
//拼接文件名(使用日期分组文件夹,加上随机文件名)
String fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + "/" + replace + "." + split[1];
// 封装数据上传
minioClient.putObject(PutObjectArgs.builder()
.bucket(minioProperties.getBucketName()) //bucket名称
.object(fileName) //对象(文件)名称
.stream(files, files.available(), -1) //文件流 , 流大小, 读到哪一个位置 ,-1 好像是代表读完
.build());
//文件访问url
String string = minioProperties.getEndpoint() + "/" + minioProperties.getBucketName() + "/" + fileName;
System.out.println(string);