网站建设找盖亚科技,新手建站详细步骤,中国互联网协会是做什么的,蒙古文网站建设工作情况汇报一、快速开始
Minlo说明#xff1a;
Minio是Apcche旗下的一款开源的轻量级文件服务器#xff0c;基于对象存储#xff0c;协议是基于Apache License v2.0#xff0c;开源可用于商务。Minio主要用来存储非结构化的数据#xff0c;类似文件#xff0c;图片#xff0c;照…一、快速开始
Minlo说明
Minio是Apcche旗下的一款开源的轻量级文件服务器基于对象存储协议是基于Apache License v2.0开源可用于商务。Minio主要用来存储非结构化的数据类似文件图片照片日志文件各类备份文件等按照官网描述文件的大小从几KB到5TB。Minio提供了非常方便友好的界面并且文档也是非常丰富具体可以参考它的文档https://docs.min.io/cn/Minlo作用类似于FastDFS和阿里云的OSS进行对象存储安装minlo服务器参考https://blog.csdn.net/u010189683/article/details/108171562
1、添加依赖
!--minio方案--
dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion7.0.2/version
/dependency
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional
/dependency2、添加配置项
## minio配置
minio:endpoint: http://192.168.179.131:9000/accessKey: adminsecretKey: admin123456 3、配置项和工具类
Data
Configuration
ConfigurationProperties(prefix minio)
public class MinioConfig {private String endpoint;private String accessKey;private String secretKey;Beanpublic MinioClient getMinioClient() throws InvalidEndpointException, InvalidPortException {MinioClient minioClient new MinioClient(endpoint, accessKey, secretKey);return minioClient;}}
Component
public class MinioUtil {Value(${minio.endpoint})private String endpoint;Value(${minio.accessKey})private String accessKey;Value(${minio.secretKey})private String secretKey;private static final int DEFAULT_EXPIRY_TIME 7 * 24 * 3600;private static MinioClient minioClient;AutowiredSneakyThrowspublic MinioClient setMinioClient(){MinioClient minioClient new MinioClient(endpoint, accessKey, secretKey);return minioClient;}/*** 检查存储桶是否存在*/SneakyThrowspublic boolean bucketExists(String bucketName){boolean flag minioClient.bucketExists(bucketName);return flag ? true : false;}/*** 创建存储桶*/SneakyThrowspublic boolean makeBucket(String bucketName) {boolean flag bucketExists(bucketName);if(flag) return false;minioClient.makeBucket(bucketName);return true;}/*** 列出所有存储桶名称*/SneakyThrowspublic ListString listBucketNames() {ListBucket bucketList listBuckets();return bucketList.stream().map(item-bucket.name()).collect(Collector.toList())}/*** 列出所有存储桶*/SneakyThrowspublic ListBucket listBuckets() {return minioClient.listBuckets();}/*** 删除存储桶*/SneakyThrowspublic boolean removeBucket(String bucketName) {boolean flag bucketExists(bucketName);if(flag) return false;IterableResultItem myObjects listObjects(bucketName);for (ResultItem result : myObjects) {Item item result.get();// 有对象文件则删除失败if (item.size() 0) {return false;}}// 删除存储桶注意只有存储桶为空时才能删除成功。minioClient.removeBucket(bucketName);flag bucketExists(bucketName);if (!flag) {return true;}}/*** 列出存储桶中的所有对象名称*/SneakyThrowspublic ListString listObjectNames(String bucketName) {ListString listObjectNames new ArrayList();boolean flag bucketExists(bucketName);if (flag) {IterableResultItem myObjects listObjects(bucketName);for (ResultItem result : myObjects) {Item item result.get();listObjectNames.add(item.objectName());}}return listObjectNames;}/*** 列出存储桶中的所有对象*/SneakyThrowspublic IterableResultItem listObjects(String bucketName) {boolean flag bucketExists(bucketName);return flag?minioClient.listObjects(bucketName):null;}/*** 通过文件上传到对象*/SneakyThrowspublic boolean putObject(String bucketName, String objectName, String fileName){boolean flag bucketExists(bucketName);if (flag) {minioClient.putObject(bucketName, objectName, fileName, null);ObjectStat statObject statObject(bucketName, objectName);if (statObject ! null statObject.length() 0) {return true;}}return false;}/*** 通过InputStream上传对象*/SneakyThrowspublic boolean putObject(String bucketName, String objectName, InputStream stream) {boolean flag bucketExists(bucketName);if (flag) {minioClient.putObject(bucketName, objectName, stream, new PutObjectOptions(stream.available(), -1));ObjectStat statObject statObject(bucketName, objectName);if (statObject ! null statObject.length() 0) {return true;}}return false;}/*** 以流的形式获取一个文件对象*/SneakyThrowspublic InputStream getObject(String bucketName, String objectName){boolean flag bucketExists(bucketName);if (flag) {ObjectStat statObject statObject(bucketName, objectName);if (statObject ! null statObject.length() 0) {InputStream stream minioClient.getObject(bucketName, objectName);return stream;}}return null;}/*** 以流的形式获取一个文件对象断点下载*/SneakyThrowspublic InputStream getObject(String bucketName, String objectName, long offset, Long length){boolean flag bucketExists(bucketName);if (flag) {ObjectStat statObject statObject(bucketName, objectName);if (statObject ! null statObject.length() 0) {InputStream stream minioClient.getObject(bucketName, objectName, offset, length);return stream;}}return null;}/*** 下载并将文件保存到本地*/SneakyThrowspublic boolean getObject(String bucketName, String objectName, String fileName) {boolean flag bucketExists(bucketName);if (flag) {ObjectStat statObject statObject(bucketName, objectName);if (statObject ! null statObject.length() 0) {minioClient.getObject(bucketName, objectName, fileName);return true;}}return false;}/*** 删除一个对象*/SneakyThrowspublic boolean removeObject(String bucketName, String objectName) {boolean flag bucketExists(bucketName);if (flag) {minioClient.removeObject(bucketName, objectName);return true;}return false;}/*** 删除指定桶的多个文件对象,返回删除错误的对象列表全部删除成功返回空列表*/SneakyThrowspublic ListString removeObject(String bucketName, ListString objectNames){ListString deleteErrorNames new ArrayList();boolean flag bucketExists(bucketName);if (flag) {IterableResultDeleteError results minioClient.removeObjects(bucketName, objectNames);for (ResultDeleteError result : results) {DeleteError error result.get();deleteErrorNames.add(error.objectName());}}return deleteErrorNames;}/*** 生成一个给HTTP GET请求用的presigned URL。* 浏览器/移动端的客户端可以用这个URL进行下载即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间默认值是7天。*/SneakyThrowspublic String presignedGetObject(String bucketName, String objectName, Integer expires) {boolean flag bucketExists(bucketName);return bucketExists(bucketName) ? minioClient.presignedGetObject(bucketName, objectName, expires):null;}/*** 生成一个给HTTP PUT请求用的presigned URL。* 浏览器/移动端的客户端可以用这个URL进行上传即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间默认值是7天。*/SneakyThrowspublic String presignedPutObject(String bucketName, String objectName, Integer expires) {return bucketExists(bucketName) ? minioClient.presignedPutObject(bucketName, objectName, expires):null;}/*** 获取对象的元数据*/SneakyThrowspublic ObjectStat statObject(String bucketName, String objectName){return bucketExists(bucketName) ? minioClient.statObject(bucketName, objectName) : null;}/*** 文件访问路径*/SneakyThrowspublic String getObjectUrl(String bucketName, String objectName) {return bucketExists(bucketName) ? minioClient.getObjectUrl(bucketName, objectName) : ;}
}