springboot 使用 minio的示例代码

网友投稿 368 2022-08-18


springboot 使用 minio的示例代码

什么是MinIo

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 Nodejs, Redis 或者 mysql。

Minio主要用来存储非结构化的数据,类似文件,图片,照片,日志文件,各类备份文件等,按照官网描述,文件的大小从几KB到5TB。

Minio提供了非常方便,友好的界面,并且文档也是非常丰富,具体可以参考它的文档:https://docs.min.io/cn/

为什么选择MinIo

在之前开发中曾使用了分布式文件服务FASTDFS和阿里云的OSS对象存储来存储。奈何OSS太贵,FASTDFS搭建配置又太繁琐,今天给大家推荐一款极易上手的高性能对象存储服务MinIo。

MinIO 是高性能的对象存储,兼容 Amazon S3接口,充分考虑开发人员的需求和体验;支持分布式存储,具备高扩展性、高可用性;部署简单但功能丰富。官方的文档也很详细。它有多种不同的部署模式(单机部署,分布式部署)。

为什么说 MinIO 简单易用,原因就在于它的启动、运行和配置都很简单。可以通过 docker 方式进行安装运行,也可以下载二进制文件,然后使用脚本运行。

下面介绍下springboot 使用 minio的详细方法,代码如下所示:

yml 配置

# ====================== ↓↓↓↓↓↓ MinIO文件服务器 ↓↓↓↓↓↓ ======================

minio:

url: http://114.67.110.190:9001

accessKey: minioadmin

secretKey: minioadmin

bucketName: zpf

maven:

io.minio

minio

7.1.0

属性文件:

package com.example.minio;

import lombok.Data;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Configuration;

@Data

@Configuration

@ConfigurationProperties(prefix = "minio")

public class MinIoProperties {

/**

* minio地址+端口号

*/

private String url;

* minio用户名

private String accessKey;

* minio密码

private String secretKey;

* 文件桶的名称

private String bucketName;

}

工具类:

package com.example.minio;

import io.minio.MinioClient;

import io.minio.ObjectStat;

import io.minio.PutObjectOptions;

import io.minio.messages.Bucket;

import lombok.SneakyThrows;

import lombok.extern.slf4j.Slf4j;

import org.apache.tomcat.util.http.fileupload.IOUtils;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;

import javax.servlet.http.HttpServletResponse;

import java.io.InputStream;

import java.net.URLEncoder;

import java.util.List;

@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

public static void createBucket(String bucketName) {

boolean isExist = minioClient.bucketExists(bucketName);

if (!isExist) {

minioClient.makeBucket(bucketName);

* 获取全部bucket

* @return: java.util.List

* @date : 2020/8/16 23:28

public static List getAllBuckets() {

return minioClient.listBuckets();

* 文件上传

* @param fileName:

* 文件名

* @param filePath:

* 文件路径

public static void upload(String bucketName, String fileName, String filePath) {

minioClient.putObject(bucketName, fileName, filePath, null);

* @param stream:

* 文件流

* @return: java.lang.String : 文件url地址

* @date : 2020/8/16 23:40

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 file:

* 文件

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();

* 删除文件

public static void deleteFile(String bucketName, String fileName) {

minioClient.removeObject(bucketName, fileName);

* 下载文件

* @param response:

* @date : 2020/8/17 0:34

public static void download(String bucketName, String fileName, HttpServletResponse response) {

// 获取对象的元数据

final ObjectStat stat = minioClient.statObject(bucketName, fileName);

response.setContentType(stat.contentType());

rIkAbLmjfesponse.setCharacterEncoding("UTF-8");

response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoderhttp://.encode(fileName, "UTF-8"));

InputStream is = minioClient.getObject(bucketName, fileName);

IOUtils.copy(is, response.getOutputStream());

* 获取minio文件的下载地址

* @return: java.lang.String

* @date : 2020/8/16 22:07

public static String getFileUrl(String bucketName, String fileName) {

return minioClient.presignedGetObject(bucketName, fileName);

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot整合阿里云开通短信服务详解
下一篇:mybatis中的if
相关文章

 发表评论

暂时没有评论,来抢沙发吧~