使用docker获取Minio镜像
docker pull minio/minio:latest
docker run -d -p 9000:9000 \
--name filesystem -v /usr/local/gps/data:/data \
-v /usr/local/gps/config:/root/.minio \
minio/minio server /data
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
ip: 9000
默认账号密码:minioadmin / minioadmin
io.minio:minio:7.1.0
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket("bucket")
.build());
minioClient.bucketExists(BucketExistsArgs.builder()
.bucket(“bucket”)
.build());
minioClient.putObject(
PutObjectArgs.builder()
.stream(inputStream, inputStream.available(), -1)
.bucket("bucket")
.contentType("content-type")
.object("fileName")
.build());
minioClient.getObjectUrl("bucket", "fileName");
// 完整的代码
public class FileProcessImpl implements FileProcess {
@Autowired
private MinioClient minioClient;
@Value("${minio.url}")
private String url;
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
@Override
public FileProcessResult<QueryUrlResult> getFileUrl(Module module, String fileName) {
log.info("getFileUrl invoke, module:{}, fileName:{}, contentType:{}", module, fileName);
if (module == null) {
return FileProcessResult.FAILURE("404", "模块参数不允许为空");
}
String mediaUrl;
try {
mediaUrl = minioClient.getObjectUrl(module.getBucket(), fileName);
} catch (Exception e) {
log.error("getFileUrl fail, module:{}, fileName:{} e:{}", module, fileName, e);
return FileProcessResult.FAILURE("502", "处理失败,请联系管理员");
}
return FileProcessResult.SUCCESS(QueryUrlResult.builder()
.path(mediaUrl)
.build());
}
@Override
public FileProcessResult<UploadFileResult> uploadFile(Module module, InputStream inputStream, String contentType,
String fileName) {
log.info("uploadFile invoke, module:{}, fileName:{}, contentType:{}", module, fileName, contentType);
if (!bucketExists(module)) {
makeBucket(module);
}
String folder = sdf.format(new Date());
try {
minioClient.putObject(
PutObjectArgs.builder()
.stream(inputStream, inputStream.available(), -1)
.bucket(module.getBucket())
.contentType(contentType)
.object(folder + "/" + fileName)
.build());
} catch (Exception e) {
log.error("uploadFile invoke fail, module:{}, fileName:{}, contentType:{},e:{}",
module, fileName, contentType, e);
return FileProcessResult.FAILURE("502", "处理失败,请联系管理员");
}
String sourcePath = url + "/" + module.getBucket() + "/" + folder + "/" + fileName;
return FileProcessResult.SUCCESS(UploadFileResult.builder()
.path(sourcePath)
.build());
}
@Override
public boolean bucketExists(Module module) {
log.info("bucketExists invoke, module:{}", module);
try {
if (module == null || StringUtils.isEmpty(module.getBucket())) {
log.warn("bucketExists invoke, module must not be null!");
return false;
}
return minioClient.bucketExists(BucketExistsArgs.builder()
.bucket(module.getBucket())
.build());
} catch (Exception e) {
log.error("bucketExists invoke fail, check bucket fail, module:{}, e:{}", module, e);
return false;
}
}
@Override
public void makeBucket(Module module) {
log.info("makeBucket invoke, module:{}", module);
try {
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket(module.getBucket())
.build());
} catch (Exception e) {
log.error("makeBucket invoke fail, create bucket fail, module:{}, e:{}", module, e);
}
}
}
public enum Module {
DEV("dev", "本地环境"),
BETA("beta", "测试环境"),
PRD("prd", "生产环境"),
;
private String bucket;
private String desc;
Module(String bucket, String desc) {
this.bucket = bucket;
this.desc = desc;
}
}
// 配置类
@Configuration
public class MinIoConfig {
@Value("${minio.url}")
private String url;
@Value("${minio.access-key}")
private String accessKey;
@Value("${minio.secret-key}")
private String secretKey;
@Bean
public MinioClient createMinIoClient() {
return MinioClient.builder()
.endpoint(this.url)
.credentials(this.accessKey, this.secretKey)
.build();
}
}