MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。
https://dl.min.io/server/minio/release/linux-amd64/minio
创建 minio 文件夹以及 data文件夹
mkdir /home/minio
mkdir /home/minio/data
将下载好的文件放入/home/minio中
先进入/home/minio中赋值权限
chmod +x minio
尝试启动
./minio server /home/minio/data
出现这个提示则添加映射路径
./minio server --console-address '0.0.0.0:9999' /home/minio/data
nohup ./minio server --console-address '0.0.0.0:9999' /home/minio/data & #后台启动
警告说的是建议修改账号密码 默认账号密码为minioadmin端口为9000
export MINIO_ACCESS_KEY=XXXXXX
export MINIO_SECRET_KEY=XXXXXX
现在直接访问,若出现进不去页面大概是没开放端口,因为映射了端口9999所以需要开放9000和9999
开放端口命令
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
主页如下
pom文件添加jar
io.minio
minio
7.0.2
yml配置文件
minio:
url: http://192.168.18.16:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: img
配置文件对应类
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIoProperties {
/**
* minio地址+端口号
*/
private String url;
/**
* minio用户名
*/
private String accessKey;
/**
* minio密码
*/
private String secretKey;
/**
* 文件桶的名称
*/
private String bucketName;
}
工具类
@Slf4j
@Component
public class MinIoUtil {
@Autowired
MinIoProperties minIoProperties;
private static MinioClient minioClient;
/**
* 初始化minio配置
*
* @param :
* @return: void
* @date : 2020/8/16 20:56
*/
@PostConstruct
public void init() {
try {
minioClient = new MinioClient(minIoProperties.getUrl(), minIoProperties.getAccessKey(),
minIoProperties.getSecretKey());
createBucket(minIoProperties.getBucketName());
} catch (Exception e) {
e.printStackTrace();
log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
}
}
/**
* 判断 bucket是否存在
*
* @param bucketName:
* 桶名
* @return: boolean
* @date : 2020/8/16 20:53
*/
@SneakyThrows(Exception.class)
public static boolean bucketExists(String bucketName) {
return minioClient.bucketExists(bucketName);
}
/**
* 创建 bucket
*
* @param bucketName:
* 桶名
* @return: void
* @date : 2020/8/16 20:53
*/
@SneakyThrows(Exception.class)
public static void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
}
/**
* 获取全部bucket
*
* @param :
* @return: java.util.List
* @date : 2020/8/16 23:28
*/
@SneakyThrows(Exception.class)
public static List getAllBuckets() {
return minioClient.listBuckets();
}
/**
* 文件上传
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param filePath:
* 文件路径
* @return: void
* @date : 2020/8/16 20:53
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, String fileName, String filePath) {
minioClient.putObject(bucketName, fileName, filePath, null);
return getFileUrl(bucketName, fileName);
}
/**
* 文件上传
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param stream:
* 文件流
* @return: java.lang.String : 文件url地址
* @date : 2020/8/16 23:40
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, String fileName, InputStream stream) {
minioClient.putObject(bucketName, fileName, stream, new PutObjectOptions(stream.available(), -1));
return getFileUrl(bucketName, fileName);
}
/**
* 文件上传
*
* @param bucketName:
* 桶名
* @param file:
* 文件
* @return: java.lang.String : 文件url地址
* @date : 2020/8/16 23:40
*/
@SneakyThrows(Exception.class)
public static String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(bucketName, fileName, is, new PutObjectOptions(is.available(), -1));
is.close();
return getFileUrl(bucketName, fileName);
}
/**
* 删除文件
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @return: void
* @date : 2020/8/16 20:53
*/
@SneakyThrows(Exception.class)
public static void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(bucketName, fileName);
}
/**
* 下载文件
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @param response:
* @return: void
* @date : 2020/8/17 0:34
*/
@SneakyThrows(Exception.class)
public static void download(String bucketName, String fileName, HttpServletResponse response) {
// 获取对象的元数据
final ObjectStat stat = minioClient.statObject(bucketName, fileName);
response.setContentType(stat.contentType());
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
InputStream is = minioClient.getObject(bucketName, fileName);
IOUtils.copy(is, response.getOutputStream());
is.close();
}
/**
* 获取minio文件的下载地址
*
* @param bucketName:
* 桶名
* @param fileName:
* 文件名
* @return: java.lang.String
* @date : 2020/8/16 22:07
*/
@SneakyThrows(Exception.class)
public static String getFileUrl(String bucketName, String fileName) {
return minioClient.presignedGetObject(bucketName, fileName);
}
}
尝试创建一个桶并上传一个MP4
@Test
void contextLoads() {
MinIoUtil.createBucket("mp4");
String imgurl = MinIoUtil.upload("mp4", UUID.randomUUID().toString(), "C:/Users/Administrator/Pictures/QQ浏览器截图/WeChat_20220115175556.mp4");
System.out.println(imgurl);
}
成功访回了地址并且可以正常访问到视频!
minio后台也看到了