工作中用到了minio文件服务,记录下minio 文件简单使用。
1.添加maven依赖2.配置信息io.minio minio7.0.2
package com.bochao.cim.file.config;
import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import lombok.Data;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
Logger logger = LoggerFactory.getLogger(this.getClass());
private String endpoint;
private Integer port;
private String accesskey;
private String secretkey;
private Boolean secure;
private String bucketName;
@Bean
public MinioClient getMinioClient() {
MinioClient minioClient = null;
try {
minioClient = new MinioClient(endpoint, port, accesskey, secretkey, secure);
logger.info("Minio文件存储服务初始化完成");
} catch (Exception e) {
logger.error("Minio文件存储服务初始化异常" + e.getMessage());
e.printStackTrace();
}
return minioClient;
}
}
3.application.yml 配置文件服务连接信息
4.文件上传下载工具类minio: endpoint: 127.0.0.1 port: 9001 accesskey: minioadmin secretkey: minioadmin secure: false #如果是true,则用的是https而不是http,默认值是true bucketName: test#默认存储桶
@EnableConfigurationProperties(MinioConfig.class)
@ConditionalOnBean(MinioConfig.class)
@Service
public class MinioStoreService {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private MinioClient minioClient;
@Autowired
private MinioConfig minioConfig;
public boolean bucketExists(String bucketName) {
try {
return minioClient.bucketExists(bucketName);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void makeBucket(String bucketName) {
try {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public boolean existFile(String path) throws Exception {
ObjectStat statObject = minioClient.statObject(minioConfig.getBucketName(), path);
if (statObject != null && statObject.length() > 0) {
return true;
}
return false;
}
@Override
public Long uploadFile(String path, MultipartFile file) {
try(InputStream inputStream = file.getInputStream()) {
//检查存储桶是否已经存在
boolean isExist = this.bucketExists(minioConfig.getBucketName());
if (!isExist) {
minioClient.makeBucket(minioConfig.getBucketName());
}
// PutObjectOptions,上传配置(文件大小,内存中文件分片大小)
//PutObjectOptions putObjectOptions = new PutObjectOptions(file.getSize(), PutObjectOptions.MIN_MULTIPART_SIZE);
PutObjectOptions putObjectOptions = new PutObjectOptions(file.getSize(), -1);
//PutObjectOptions putObjectOptions = new PutObjectOptions(inputStream.available(), -1);
// 文件的ContentType
putObjectOptions.setContentType(file.getContentType());
minioClient.putObject(minioConfig.getBucketName(), path, inputStream, putObjectOptions);
return file.getSize();
} catch (Exception e) {
logger.error("Minio上传文件出错");
e.printStackTrace();
}
return 0L;
}
@Override
public Long uploadFile(String path, File file) {
try (InputStream inputStream = new FileInputStream(file)) {
//检查存储桶是否已经存在
boolean isExist = this.bucketExists(minioConfig.getBucketName());
if (!isExist) {
minioClient.makeBucket(minioConfig.getBucketName());
}
minioClient.putObject(minioConfig.getBucketName(), path, inputStream, new PutObjectOptions(file.length(), -1));
return file.length();
} catch (Exception e) {
logger.error("Minio上传文件出错");
e.printStackTrace();
}
return 0L;
}
@Override
public String mkdir() throws Exception {
boolean b = this.bucketExists(minioConfig.getBucketName());
if (!b) {
this.makeBucket(minioConfig.getBucketName());
}
return minioConfig.getBucketName();
}
@Override
public void downloadFile(String storePath, ServletOutputStream outputStream) throws Exception {
boolean flag = this.existFile(storePath);
if (!flag) {
throw new MicroServiceException(ResultCode.RESULE_DATA_NONE.code(), "文件不存在");
}
try (InputStream inputStream = minioClient.getObject(minioConfig.getBucketName(), storePath)) {
IOUtils.copy(inputStream, outputStream);
} catch (Exception e) {
logger.error("文件下载异常");
e.printStackTrace();
}
}



