1. docker安装minio
docker run -p 9000:9000 -p 9090:9090 --name minio -d --restart=always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=admin321" -v /mnt/minio/data:/data -v /mnt/minio/config:/root/.minio minio/minio server /data --console-address ":9000" --address ":9090"
访问 http://ip:9000 即可进入minio客户端
9090是sdk连接minio服务的端口,9000是minio客户端的端口。其中MINIO_ROOT_USER、MINIO_ROOT_PASSWORD是控制台的登陆用户名和密码,也是java sdk连接minio server的accessKey和SecretKey。
2. springboot整合minio
2.1 添加minio 相关依赖
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.4.3</version>
</dependency>
<!-- minio需要用到okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.2</version>
</dependency>
2.2 注入MinioClient 以便后续使用
META-INF/spring-configuration-metadata.json
{
"properties": [
{
"name": "minio.endpoint",
"defaultValue": "minio地址"
},
{
"name": "minio.port",
"defaultValue": "minio端口"
},
{
"name": "minio.accessKey",
"defaultValue": "accessKey类似于用户ID,用于唯一标识你的账户。"
},
{
"name": "minio.secretKey",
"defaultValue": "secretKey是你账户的密码"
},
{
"name": "minio.bucketName",
"defaultValue": "minio存储桶名称"
}
]
}
minioProperties.java
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioProperties {
private String endpoint;
private int port;
private String bucketName;
private String accessKey;
private String secretKey;
}
application.yml
minio:
# nginx 配置已经配置了 ip/ 转到 ip:9090 port可以不需要
endpoint: https://minio的ip
# port: 9090
accessKey: admin
secretKey: admin321
nginx.conf
server {
listen 80;
server_name 127.0.0.1;
location / {
proxy_set_header HOST $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9090;
}
}
minioConfig.java
@Configuration
@RequiredArgsConstructor
@ConditionalOnBean(MinioProperties.class)
public class MinioConfig {
private final MinioProperties properties;
@Bean
public MinioClient minioClient() {
// nginx 配置已经配置了 ip/ 转到 ip:9090 所以构建endpoint不需要配置port
return MinioClient.builder()
.endpoint(properties.getEndpoint())
.credentials(properties.getAccessKey(), properties.getSecretKey()).build();
}
}
至此,minio配置完成,接下来可以注入 MinioClient来使用了, 例如:
@Slf4j
@Service
@RequiredArgsConstructor
public class MinioService {
private final MinioClient client;
/**
* 获取文件下载地址
* @param bucketName 存储桶名称
* @param objectName 文件名称
* @return
*/
public String preview(String bucketName, String objectName) {
try {
GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.builder()
.bucket(bucketName)
.object(objectName)
.method(Method.GET)
.build();
return client.getPresignedObjectUrl(args);
} catch (Exception e) {
log.error("获取文件下载地址出错", e);
throw new RuntimeException("获取文件下载地址出错");
}
}
}