简介
说明
本文介绍MinIO这个对象存储服务,包括:安装、前端页面的使用、文件永久有效的设置方法、Java操作MinIO的实例。
很多时候,我们会需要存一些视频、图片、文件,这些数据放在数据库是不合适的,应该将它们放到OSS(对象存储服务),OSS是专门存放这些文件的。
对于OSS,我们可以选用现成的,比如阿里云的OSS,也可以自己进行搭建。如果自己搭建,可以选择MinIO、FastDFS这些开源的对象存储工具,MinIO是一款很好的对象存储(OSS)工具,比FastDFS好用很多。
官网
MinIO 官网文档(英文)
Minio官网文档(中文)
安装
其他网址
使用
其他网址
永久有效
其他网址
说明
文件默认有效期是7天,最长可以设置为7天,本处介绍将文件有效期设置为永久的方法。
Java实例
application.yml
custom:
minio:
url: http://192.168.1.200:11851
accessKey: minioadmin
secretKey: minioadmin
bucketName: interaction-equipment
工具类
package com.landsky.interaction.common.utils;
import io.minio.*;
import io.minio.http.Method;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Slf4j
@Component
public class MinioUtil {
@Value("${custom.minio.url}")
private String minioUrl;
@Value("${custom.minio.accessKey}")
private String accessKey;
@Value("${custom.minio.secretKey}")
private String secretKey;
@Value("${custom.minio.bucketName}")
private String bucketName;
private MinioClient minioClient;
/**
* 若文件已经存在,则直接覆盖
* @param inputStream
* @param fileName
* @return 文件的url
*/
public String uploadFileOverride(InputStream inputStream, String fileName) {
Map<String, String> headers = new HashMap<>();
headers.put("Content-Type", "text/plain; charset=utf-8");
PutObjectArgs putObjectArgs;
try {
putObjectArgs = PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(inputStream, inputStream.available(), -1)
.headers(headers)
.build();
} catch (IOException e) {
throw new RuntimeException("Minio:检查输入流是否可用失败", e);
}
try {
minioClient.putObject(putObjectArgs);
} catch (Exception e) {
throw new RuntimeException("Minio:存放对象失败", e);
}
GetPresignedObjectUrlArgs urlArgs = GetPresignedObjectUrlArgs.builder()
.bucket(bucketName)
.object(fileName)
.method(Method.GET)
//.expiry(24, TimeUnit.HOURS)
.build();
String url = null;
try {
url = minioClient.getPresignedObjectUrl(urlArgs);
} catch (Exception e) {
throw new RuntimeException("Minio:获得对象URL失败", e);
}
return url;
}
public void removeFile(String fileName){
try {
minioClient.removeObject(
RemoveObjectArgs.builder().bucket(bucketName).object(fileName).build()
);
} catch (Exception e) {
throw new RuntimeException("Minio:删除对象失败", e);
}
}
@PostConstruct
private void init() {
minioClient = MinioClient.builder()
.endpoint(minioUrl)
.credentials(accessKey, secretKey)
.build();
createBucket();
}
private void createBucket() {
boolean isExist = false;
try {
isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
log.error("检查Minio桶({})是否存在失败", bucketName);
e.printStackTrace();
}
if (!isExist) {
try {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
} catch (Exception e) {
log.error("创建Minio桶({})失败", bucketName);
e.printStackTrace();
}
}
}
}
其他网址
MinIO很强-让我放弃FastDFS拥抱MinIO的8个理由
Java实例