一、 MinIO
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服
务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/
虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者
MySQL。
二、 MinIO安装和启动
由于MinIO是一个单独的服务器,需要单独部署,有关MinIO在Windows系统上的使用请查看
以下博客。
window10安装minio_angelasp的博客-CSDN博客_win10 安装minio
三、 pom.xml(maven依赖文件)
org.springframework.boot spring-boot-starter-web io.minio minio 8.3.4
四、 applicatin.properties(配置文件)
# 设置单个文件大小spring.servlet.multipart.max-file-size= 50MB#minio文件服务器配置s3.url=http://localhost:9000s3.accessKey=admins3.secretKey=admin123s3.bucketName=test
五、 编写Java业务类
minio涉及到的方法有:判断存储桶是否存在,创建存储桶,上传文件,读取文件、下载文件,删
除文件等操作
StorageProperty 存储属性类:
import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component; @Data@Component@ConfigurationProperties(prefix = "s3")public class StorageProperty { private String url; private String accessKey; private String secretKey;// private long callTimeOut = 60000;// private long readTimeOut = 300000;}
minio配置类:
import io.minio.BucketExistsArgs;import io.minio.MinioClient;import io.minio.messages.Bucket;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Configuration;import org.springframework.stereotype.Component; import javax.annotation.PostConstruct;import java.util.List; @Slf4j@Component@Configurationpublic class MinioClientConfig { @Autowired private StorageProperty storageProperty; private static MinioClient minioClient; public static MinioClient getMinioClient(){ return minioClient; } @SneakyThrows(Exception.class) public static boolean bucketExists(String bucketName) { return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build()); } @SneakyThrows(Exception.class) public static List getAllBuckets() { return minioClient.listBuckets(); } @PostConstruct public void init() { try { minioClient = MinioClient.builder() .endpoint(storageProperty.getUrl()) .credentials(storageProperty.getAccessKey(), storageProperty.getSecretKey()) .build(); } catch (Exception e) { e.printStackTrace(); log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace()); } } }
minio工具类
import io.minio.*; import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.InputStream;import java.nio.charset.StandardCharsets;import java.util.Map; @Slf4j@Componentpublic class MinioUtil { public ResultEntity
六、 MinIoController
文件上传、文件读取、文件下载、文件删除接口如下:
@RestController@RequestMapping("/minio")public class MinIoController extends BaseController { MinioUtil minioUtil = new MinioUtil(); @PostMapping("/uploadFile") public AjaxResult uploadFile(@RequestBody MultipartFile file) { MinioClient minioClient = MinioClientConfig.getMinioClient(); if (minioClient == null) { return AjaxResult.error("连接MinIO服务器失败", null); } ResultEntity> result = minioUtil.minioUpload(file, "", "data-enpower"); if (result.getCode() == 0) { return AjaxResult.success("上传成功"); } else { return AjaxResult.error("上传错误!!!"); } } @RequestMapping("/getRedFile") public AjaxResult getRedFile(@RequestBody String fileName) { MinioClient minioClient = MinioClientConfig.getMinioClient(); if (minioClient == null) { return AjaxResult.error("连接MinIO服务器失败", null); } String url = minioUtil.getPreviewFileUrl("data-enpower",fileName); return AjaxResult.success(url); } @RequestMapping("/downloadFile") public String downloadFile(@RequestParam String fileName, HttpServletResponse response) { MinioClient minioClient = MinioClientConfig.getMinioClient(); if (minioClient == null) { return "连接MinIO服务器失败"; } return minioUtil.downloadFile("data-enpower",fileName,response) != null ? "下载成功" : "下载失败"; } @PostMapping("/deleteFile") public String deleteFile(String fileName) { MinioClient minioClient = MinioClientConfig.getMinioClient(); if (minioClient == null) { return "连接MinIO服务器失败"; } boolean flag = minioUtil.deleteFile("data-enpower",fileName); return flag == true ? "删除成功" : "删除失败"; } }
对象存储MinIO基本用法
https://www.cnblogs.com/hackyle/p/minio-demo.html
来源地址:https://blog.csdn.net/ZHOU_VIP/article/details/129195318