package com.gaoxinqimeng.minio.util;
import io.minio.*;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.*;
import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
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.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import static io.minio.GetPresignedObjectUrlArgs.DEFAULT_EXPIRY_TIME;
/**
* minio8的操作工具类,通用版
*/
@Component
public class MinIoUtil {
@Autowired
private MinioClient minioClient;
/**
* 判断存储桶,存在返回true
* @param bucketName 存储桶名称
* @return
*/
@SneakyThrows
public boolean bucketExists(String bucketName) {
boolean flag = false;
flag = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (flag) {
return true;
}
return false;
}
/**
* 创建
*/
@SneakyThrows
public boolean makeBucket(String bucketName) {
boolean flag = bucketExists(bucketName);
if (flag) {
return false;
} else {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
return true;
}
}
/**
* 删除
* @return
*/
@SneakyThrows
public boolean removeBucket(String bucketName) {
boolean flag = bucketExists(bucketName);
if (flag) {
Iterable<Result<Item>> myObjects = listObjects(bucketName);
for (Result<Item> result : myObjects) {
Item item = result.get();
// 有对象文件,则删除失败
if (item.size() > 0) {
return false;
}
}
//存储桶为空时才能删
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
flag = bucketExists(bucketName);
if (!flag) {
return true;
}
}
return false;
}
/**
* 查询列表
* @return
*/
@SneakyThrows
public List<String> listBucketNames() {
List<Bucket> bucketList = listBuckets();
List<String> bucketListName = new ArrayList<>(bucketList.size());
for (Bucket bucket : bucketList) {
bucketListName.add(bucket.name());
}
return bucketListName;
}
/**
* 查询所有
* @return
*/
@SneakyThrows
public List<Bucket> listBuckets() {
return minioClient.listBuckets();
}
/**
* 查询存储中的对象
*/
@SneakyThrows
public List<String> listObjectNames(String bucketName) {
List<String> listObjectNames = new ArrayList<>();
boolean flag = bucketExists(bucketName);
if (flag) {
Iterable<Result<Item>> myObjects = listObjects(bucketName);
for (Result<Item> result : myObjects) {
Item item = result.get();
listObjectNames.add(item.objectName());
}
}
return listObjectNames;
}
/**
* 查询所有对象
*/
@SneakyThrows
public Iterable<Result<Item>> listObjects(String bucketName) {
return minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
}
/**
* 通过prefix查询
* @param bucketName 存储桶名称
* @param prefix 前缀
* @param after 后缀
* @param maxKeys 最大数量
* @return
*/
@SneakyThrows
public Iterable<Result<Item>> listObjects(String bucketName, String prefix, String after, int maxKeys) {
ListObjectsArgs.Builder builder = ListObjectsArgs.builder().bucket(bucketName);
if (prefix != null && prefix.length() > 0) {
builder.prefix(prefix);
}
if (after != null && after.length() > 0) {
builder.startAfter(after);
}
if (maxKeys > 0) {
builder.maxKeys(maxKeys);
}
return minioClient.listObjects(builder.build());
}
/**
* 删除
*/
@SneakyThrows
public void deleteObjectTags(String bucketName, String objectName) {
minioClient.deleteObjectTags(DeleteObjectTagsArgs.builder().bucket(bucketName).object(objectName).build());
}
/**
* 有时候是IO流的形式进行读取或者传递接口
* @return
*/
@SneakyThrows
public InputStream getObject(String bucketName, String objectName) {
InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.build());
return stream;
}
/**
* 通过起始位置进行控制续传
* @param bucketName 存储桶名称
* @param objectName 存储桶里的对象名称
* @param offset 起始字节的位置
* @param length 要读取的长度 (可选,如果无值则代表读到文件结尾)
* @return
*/
@SneakyThrows
public InputStream getObject(String bucketName, String objectName, long offset, Long length) {
InputStream stream = minioClient.getObject(
GetObjectArgs.builder()
.bucket(bucketName)
.object(objectName)
.offset(offset)
.length(length)
.build());
return stream;
}
/**
* 查询对应对象的标签
* @return
*/
public Tags getObjectTags(String bucketName, String objectName) {
Tags tags = null;
try {
tags = minioClient.getObjectTags(GetObjectTagsArgs.builder().bucket(bucketName).object(objectName).build());
} catch (Exception e) {
//e.printStackTrace();
throw new RuntimeException(e.getMessage());
}
return tags;
}
/**
* 删除
*/
@SneakyThrows
public boolean removeObject(String bucketName, String objectName) {
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
return true;
}
/**
* 批量删除
*/
@SneakyThrows
public List<String> removeObjects(String bucketName, List<String> objectNames) {
List<String> deleteErrorNames = new ArrayList<>();
boolean flag = bucketExists(bucketName);
if (flag) {
List<DeleteObject> list = new LinkedList<>();
objectNames.forEach(item -> list.add(new DeleteObject(item)));
Iterable<Result<DeleteError>> results = minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(list).build());
for (Result<DeleteError> result : results) {
DeleteError error = result.get();
deleteErrorNames.add(error.objectName());
}
}
return deleteErrorNames;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用 springboot整合minio的java源码,生产环境可直接复用
资源推荐
资源详情
资源评论
收起资源包目录
springboot+minio的api后端源代码.rar (168个子文件)
MinIoUtil.class 14KB
MinioServiceImpl.class 7KB
CloudResult.class 6KB
DruidConfiguration$IDataSourceProperties.class 6KB
File.class 6KB
FileController.class 6KB
MinIoClientConfig.class 5KB
DruidConfiguration.class 4KB
SwaggerConfiguration.class 2KB
MinioController.class 2KB
GlobalCorsConfig.class 2KB
ResponseCode.class 2KB
MetaObjectHandlerConfig.class 1KB
MybatisPlusConfig.class 903B
GaoxinqimengMinioApplication.class 784B
FileServiceImpl.class 724B
GaoxinqimengMinioApplicationTests.class 582B
MinioSerivce.class 540B
FileService.class 323B
FileMapper.class 312B
mvnw.cmd 6KB
.gitignore 395B
.gitignore 0B
gaoxinqimeng-minio.iml 13KB
maven-wrapper.jar 50KB
MinIoUtil.java 10KB
DruidConfiguration.java 10KB
MinioServiceImpl.java 5KB
CloudResult.java 5KB
MavenWrapperDownloader.java 5KB
FileController.java 3KB
MinioController.java 2KB
SwaggerConfiguration.java 2KB
MinIoClientConfig.java 1KB
GlobalCorsConfig.java 1KB
MybatisPlusConfig.java 794B
File.java 679B
MetaObjectHandlerConfig.java 678B
ResponseCode.java 603B
MinioSerivce.java 468B
FileServiceImpl.java 418B
GaoxinqimengMinioApplication.java 349B
GaoxinqimengMinioApplicationTests.java 234B
FileService.java 206B
FileMapper.java 202B
HELP.md 544B
mvnw 10KB
maven-wrapper.properties 218B
workspace.xml 5KB
pom.xml 3KB
compiler.xml 909B
jarRepositories.xml 880B
Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml 835B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_4.xml 736B
Maven__org_mybatis_spring_boot_mybatis_spring_boot_autoconfigure_2_1_4.xml 730B
Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml 721B
Maven__com_github_xiaoymin_knife4j_spring_boot_autoconfigure_2_0_4.xml 714B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_4_4.xml 713B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_4.xml 695B
Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml 693B
Maven__org_springframework_boot_spring_boot_starter_logging_2_4_4.xml 692B
Maven__org_mybatis_spring_boot_mybatis_spring_boot_starter_2_1_4.xml 688B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_4_4.xml 685B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_4.xml 681B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_4_4.xml 678B
Maven__com_github_xiaoymin_knife4j_spring_boot_starter_2_0_4.xml 672B
Maven__org_springframework_boot_spring_boot_starter_json_2_4_4.xml 671B
Maven__org_springframework_boot_spring_boot_starter_jdbc_2_4_4.xml 671B
Maven__org_springframework_boot_spring_boot_starter_test_2_4_4.xml 671B
Maven__org_springframework_boot_spring_boot_starter_web_2_4_4.xml 664B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_44.xml 660B
Maven__com_google_errorprone_error_prone_annotations_2_3_4.xml 652B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_4.xml 651B
Maven__org_springframework_boot_spring_boot_starter_2_4_4.xml 636B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 633B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__org_junit_platform_junit_platform_commons_1_7_1.xml 633B
Maven__io_springfox_springfox_bean_validators_2_9_2.xml 630B
Maven__com_baomidou_mybatis_plus_boot_starter_3_4_1.xml 630B
Maven__com_fasterxml_jackson_core_jackson_databind_2_11_4.xml 630B
Maven__org_junit_platform_junit_platform_engine_1_7_1.xml 626B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_44.xml 625B
Maven__io_springfox_springfox_swagger_common_2_9_2.xml 623B
Maven__com_carrotsearch_thirdparty_simple_xml_safe_2_7_1.xml 620B
Maven__com_baomidou_mybatis_plus_annotation_3_4_1.xml 616B
Maven__com_github_xiaoymin_knife4j_annotations_2_0_4.xml 616B
Maven__org_junit_jupiter_junit_jupiter_engine_5_7_1.xml 615B
Maven__org_junit_jupiter_junit_jupiter_params_5_7_1.xml 615B
Maven__org_springframework_boot_spring_boot_test_2_4_4.xml 615B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 611B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 611B
Maven__com_baomidou_mybatis_plus_extension_3_4_1.xml 609B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_13_3.xml 608B
Maven__org_mockito_mockito_junit_jupiter_3_6_28.xml 605B
Maven__org_springframework_spring_expression_5_3_5.xml 602B
Maven__com_fasterxml_jackson_core_jackson_core_2_11_4.xml 602B
Maven__com_github_xiaoymin_knife4j_spring_ui_2_0_4.xml 602B
Maven__io_springfox_springfox_spring_web_2_9_2.xml 595B
Maven__org_junit_jupiter_junit_jupiter_api_5_7_1.xml 594B
共 168 条
- 1
- 2
资源评论
季风泯灭的季节
- 粉丝: 599
- 资源: 2921
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第39题组合总和.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第38题外观数列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第37题解数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第36题有效的数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第35题搜索插入位置.zip
- index.wxml
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功