0
点赞
收藏
分享

微信扫一扫

对象存储(OSS)--MinIO--使用/教程/实例

灵魂跑者 2022-02-25 阅读 67


简介

说明

        ​本文介绍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实例


举报

相关推荐

0 条评论