Diretório de artigos
Este artigo explica apenas o uso básico do MinIo. Abaixo estão alguns exemplos de códigos prontos para uso, mas preste atenção aos dois conceitos de baldes e objetos. Os dois conceitos de baldes e objetos são explicados abaixo.
Pré trabalho
Um serviço Minio Server precisa ser instalado em um determinado servidor.
Minio depende de
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.0</version>
</dependency>
Classe de configuração do MinioClient
configuração do yml
# minio
minio:
# 服务地址
endpoint: http://localhost:9000
# 账号
accessKey: minioadmin
# 密码
secretKey: minioadmin
Classe de configuração do cliente
Aqui, o MinioClient é injetado no Bean e, em seguida, o MinioClient é usado para chamar a API do Minio.
import io.minio.MinioClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class MinIoClientConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
/**
* 注入minio 客户端
* @return
*/
@Bean
public MinioClient minioClient(){
return MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
}
}
Operação básica do Minio
Defina uma interface OSSFileService aqui para abstrair a implementação concreta do Minio.
Um conceito 桶(bucket)
de . Este balde é usado pelo Minio para dividir dados diferentes. Você pode entendê-lo como uma pasta. No entanto, os baldes têm atributos públicos e privados aqui. Os baldes públicos podem ser navegados casualmente, enquanto os baldes privados precisam ser fornecidos Defina um tempo de navegação, além desse tempo de navegação, você não poderá mais navegar.
objectName
Nome do objeto: O nome do objeto pode ser entendido como qual pasta, qual arquivo, o nome do objeto, por exemplo: public/images/111.jpg
OSSFileService
public interface FileService {
/**
* 上传文件
*
* @param bucketName 存储桶名称
* @param input 文件流
* @param objectName 对象名称
* @param contentType contentType
* @return
*/
void uploadFile(String bucketName, InputStream input, String objectName, String contentType);
/**
* 根据对象名称获取公共文件访问路径
*
* @param bucketName 存储桶名称
* @param objectName 对象名称
*/
String getUrlByBucketNameAndObjectName(String bucketName, String objectName);
/**
* 根据对象名称获取文件访问路径
*
* @param bucketName 存储桶名称
* @param objectName 对象名称
* @param getUrlTime 访问文件路径时间
* @param timeUnit 访问时间格式
* @return
*/
String getUrlByBucketNameAndObjectNameAndTime(String bucketName, String objectName, int getUrlTime, TimeUnit timeUnit);
/**
* 根据对象名称和桶名称删除对象
*
* @param bucketName 桶名称
* @param objectName 对象名称
* @return
*/
void remove(String bucketName, String objectName);
}
@Service
public class OssFileServiceImpl implements OssFileService {
@Autowired
private MinioClient minioClient;
@Override
public void uploadFile(String bucketName, InputStream input, String objectName, String contentType) {
try {
minioClient.putObject(
PutObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.contentType(contentType)
.stream(input, input.available(), -1)
.build());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public String getUrlByBucketNameAndObjectName(String bucketName, String objectName) {
return this.getUrl(bucketName, objectName, 1, TimeUnit.DAYS);
}
@Override
public String getUrlByBucketNameAndObjectNameAndTime(String bucketName, String objectName, int getUrlTime, TimeUnit timeUnit) {
return this.getUrl(bucketName, objectName, getUrlTime, timeUnit);
}
@Override
public void remove(String bucketName, String objectName) {
try {
minioClient.removeObject(RemoveObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根据 桶、object、时间 获取文件路径
*
* @param bucketName 桶名称
* @param objectName object
* @param getUrlTime 时间
* @param timeUnit 时间格式
* @return
*/
private String getUrl(String bucketName, String objectName, int getUrlTime, TimeUnit timeUnit) {
try {
return minioClient.getPresignedObjectUrl(
GetPresignedObjectUrlArgs.builder()
.bucket(bucketName)
.object(objectName)
.expiry(getUrlTime, timeUnit)
.method(Method.GET)
.build());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}