package com.xiaohui.utils;
import com.xiaohui.config.MinioConfig;
import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import lombok.SneakyThrows;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @Description Minio工具类
* @Author IT小辉同学
* @Date 2023/06/02
*/
@Component
public class MinioUtils {
@Autowired
private MinioClient minioClient;
@Autowired
private MinioConfig configuration;
/**
* @param name 名字
* @return boolean
* @Description description: 判断bucket是否存在,不存在则创建
* @Author IT小辉同学
* @Date 2023/06/02
*/
public boolean existBucket(String name) {
boolean exists;
try {
exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
exists = true;
}
} catch (Exception e) {
e.printStackTrace();
exists = false;
}
return exists;
}
/**
* @param bucketName 存储bucket名称
* @return {@link Boolean }
* @Description 创建存储bucket
* @Author IT小辉同学
* @Date 2023/06/02
*/
public Boolean makeBucket(String bucketName) {
try {
minioClient.makeBucket(MakeBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* @param bucketName 存储bucket名称
* @return {@link Boolean }
* @Description 删除存储bucket
* @Author IT小辉同学
* @Date 2023/06/02
*/
public Boolean removeBucket(String bucketName) {
try {
minioClient.removeBucket(RemoveBucketArgs.builder()
.bucket(bucketName)
.build());
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* @param fileName 文件名称
* @param time 时间
* @return {@link Map }
* @Description 获取上传临时签名
* @Author IT小辉同学
* @Date 2023/06/02
*/
@SneakyThrows
public Map getPolicy(String fileName, ZonedDateTime time) {
PostPolicy postPolicy = new PostPolicy(configuration.getBucketName(), time);
postPolicy.addEqualsCondition("key", fileName);
try {
Map<String, String> map = minioClient.getPresignedPostFormData(postPolicy);
HashMap<String, String> map1 = new HashMap<>();
map.forEach((k, v) -> {
map1.put(k.replaceAll("-", ""), v);
});
map1.put("host", configuration.getUrl() + "/" + configuration.getBucketName());
return map1;
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
}
return null;
}
/**
* @param objectName 对象名称
* @param method 方法
* @param time 时间
* @param timeUnit 时间单位
* @return {@link String }
* @Description 获取上传文件的url
* @Author IT小辉同学
* @Date 2023/06/02
*/
public String getPolicyUrl(String objectName, Method method, int time, TimeUnit timeUnit) {
try {
return minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(method)
.bucket(configuration.getBucketName())
.object(objectName)
.expiry(time, timeUnit).build());
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
}
return null;
}
/**
* @param file 文件
* @param fileName 文件名称
* @Description 上传文件
* @Author IT小辉同学
* @Date 2023/06/02
*/
public void upload(MultipartFile file, String fileName) {
// 使用putObject上传一个文件到存储桶中。
try {
InputStream inputStream = file.getInputStream();
minioClient.putObject(PutObjectArgs.builder()
.bucket(configuration.getBucketName())
.object(fileName)
.stream(inputStream, file.getSize(), -1)
.contentType(file.getContentType())
.build());
} catch (ErrorResponseException e) {
e.printStackTrace();
} catch (InsufficientDataException e) {
e.printStackTrace();
} catch (InternalException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidResponseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (ServerException e) {
e.printStackTrace();
} catch (XmlParserException e) {
e.printStackTrace();
}
}
/**
* @param objectName 对象名称
* @param time 时间
* @param timeUnit 时间单位
* @return {@link String }
* @Description 根据filename获取文件访问地址
* @Author IT小辉同学
* @Date 2023/06/02
*/
public String getUrl(String objectName, int time, TimeUnit timeUnit) {
String url = null;
try {
url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder()
.method(Method.GET)
.bucket(configuration.getBucketName())
.object(objectName)
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Minio是一款开源的对象存储服务器,它可以运行在多种操作系统上,包括Linux、Windows和MacOS等。它提供了一种简单、可扩展、高可用的对象存储解决方案,支持多种数据格式,包括对象、块和文件等。 以下是Minio的主要特点: 简单易用:Minio的安装和配置非常简单,只需要下载并运行相应的二进制文件即可。它提供了一个Web UI,可以通过界面管理存储桶和对象。 可扩展性:Minio可以轻松地扩展到多个节点,以提供高可用性和容错能力。它支持多种部署模式,包括单节点、主从复制和集群等。 高可用性:Minio提供了多种机制来保证数据的可靠性和可用性,包括冗余备份、数据复制和故障转移等。 安全性:Minio提供了多种安全机制来保护数据的机密性和完整性,包括SSL/TLS加密、访问控制和数据加密等。 多语言支持:Minio支持多种编程语言,包括Java、Python、Ruby和Go等。 社区支持:Minio是一个开源项目,拥有庞大的社区支持和贡献者。它的源代码可以在GitHub上获得,并且有一个活跃的邮件列表和论坛。 对象存储:Minio的核心功能是对象存储。它允许用户
资源推荐
资源详情
资源评论
收起资源包目录
MinioExample.zip (39个子文件)
HELP.md 853B
pom.xml 3KB
src
test
java
com
xiaohui
MinioExampleApplicationTests.java 218B
main
resources
static
index.html 79B
application.yml 344B
java
com
xiaohui
controller
MinioFileUploadController.java 2KB
utils
MinioUtils.java 11KB
Constants.java 3KB
AjaxResult.java 4KB
HttpStatus.java 2KB
MinioExampleApplication.java 328B
domain
config
MinioConfig.java 804B
.idea
jarRepositories.xml 880B
ZeppelinRemoteNotebooks
uiDesigner.xml 9KB
workspace.xml 6KB
misc.xml 513B
inspectionProfiles
Project_Default.xml 155B
compiler.xml 604B
checkstyle-idea.xml 721B
.gitignore 0B
encodings.xml 267B
aws.xml 304B
target
classes
static
index.html 79B
application.yml 344B
com
xiaohui
MinioExampleApplication.class 717B
controller
MinioFileUploadController.class 2KB
utils
AjaxResult.class 2KB
HttpStatus.class 881B
MinioUtils.class 12KB
Constants.class 2KB
config
MinioConfig.class 3KB
xiaohui-0.0.1-SNAPSHOT.jar 12KB
test-classes
com
xiaohui
MinioExampleApplicationTests.class 545B
maven-status
maven-compiler-plugin
compile
default-compile
createdFiles.lst 273B
inputFiles.lst 826B
testCompile
default-testCompile
createdFiles.lst 47B
inputFiles.lst 126B
maven-archiver
pom.properties 109B
generated-test-sources
test-annotations
generated-sources
annotations
.gitignore 395B
共 39 条
- 1
资源评论
小风飞子
- 粉丝: 322
- 资源: 1500
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功