一、环境:
# 创建文件夹
mkdir -p /home/minio
# 进入安装目录:
cd /home/minio
# 下载安装包
wget https://dl.min.io/server/minio/release/linux-amd64/minio
二、安装
# 给minio赋权
chmod +x minio
# 设置用户名、密码
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin
# 创建存储目录及日志文件
mkdir -p /home/minio/data
cd /home/minio/data
# 创建日志文件
touch minio.log
# 防火墙开放端口权限
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
三、启动
# 进入minio的下载目录
cd /home/minio
# 直接启动
./minio server /home/minio/data
# 后台启动
nohup ./minio server --address '0.0.0.0:9000' --console-address '0.0.0.0:9999' /home/minio/data >/home/minio/data/minio.log 2>&1 &
# 访问地址,浏览器访问
ip:9999
四、常用操作
登录后创建bucket
上传文件
设置公开访问 永久访问链接
五、Java操作
首先引入依赖
<!--MinIO-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>8.3.3</version>
</dependency>
其次加入配置
# Minio配置
minio:
url: http://IP:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: test
工具类
@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<io.minio.messages.Bucket>
* @date : 2020/8/16 23:28
*/
@SneakyThrows(Exception.class)
public static List<Bucket> 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);
}
}
尝试创建一个桶并上传一个文件
@Test
void contextLoads() {
MinIoUtil.createBucket("test");
String imgurl = MinIoUtil.upload("test", UUID.randomUUID().toString(), "文件");
System.out.println(imgurl);
}