app开发者平台在数字化时代的重要性与发展趋势解析
690
2022-10-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:
属性文件:
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-.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
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~