Minio工具类 MinioUtils
Minio工具类 MinioUtils
import com.alibaba.fastjson.JSONObject;
import com.dpms.business.minio.MinioProp;
import com.dpms.common.utils.StringUtils;
import io.minio.*;
import io.minio.errors.*;
import io.minio.messages.Bucket;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct;
import java.io.*;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;/*** @author 云诺* @ClassName: MinioUtils* @Description: (minio工具类)* @date 2021/1/4 18:07*/
@Component
@Slf4j
public class MinioUtils {@Autowiredprivate MinioProp minioProp;private MinioClient minioClient;@PostConstructprivate MinioClient client() {try {log.info("minioClient create start");minioClient = MinioClient.builder().endpoint(minioProp.getEndpoint()).credentials(minioProp.getAccesskey(), minioProp.getSecretkey()).build();log.info("minioClient create end");createBucket();} catch (Exception e) {log.error("连接MinIO服务器异常:{}", e);}return minioClient;}/*** @Title: createBucket* @Description: (创建bucket)* @author 云诺* [bucketName] 桶名*/public void createBucket(String bucketName) {try {if (!client().bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());}} catch (Exception e) {log.error("创建桶失败:{}", e);}}/*** 初始化Bucket** @throws Exception 异常*/private void createBucket()throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, RegionConflictException {if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioProp.getBucketName()).build())) {minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioProp.getBucketName()).build());}}/*** 判断文件是否存在** @param bucketName 存储桶* @param objectName 对象* @return true:存在*/public boolean doesObjectExist(String bucketName, String objectName) {boolean exist = true;try {minioClient.statObject(StatObjectArgs.builder().bucket(bucketName).object(objectName).build());} catch (Exception e) {exist = false;}return exist;}/*** 判断文件夹是否存在** @param bucketName 存储桶* @param objectName 文件夹名称(去掉/)* @return true:存在*/public boolean doesFolderExist(String bucketName, String objectName) {boolean exist = false;try {Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(false).build());for (Result<Item> result : results) {Item item = result.get();if (item.isDir() && objectName.equals(item.objectName())) {exist = true;}}} catch (Exception e) {exist = false;}return exist;}/*** 通过MultipartFile,上传文件** @param bucketName 存储桶* @param file 文件* @param objectName 对象名*/public ObjectWriteResponse putObject(String bucketName, MultipartFile file,String objectName, String contentType)throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {InputStream inputStream = file.getInputStream();return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType).stream(inputStream, inputStream.available(), -1).build());}/*** 上传本地文件** @param bucketName 存储桶* @param objectName 对象名称* @param fileName 本地文件路径*/public ObjectWriteResponse putObject(String bucketName, String objectName,String fileName)throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {return minioClient.uploadObject(UploadObjectArgs.builder().bucket(bucketName).object(objectName).filename(fileName).build());}/*** 通过流上传文件** @param bucketName 存储桶* @param objectName 文件对象* @param inputStream 文件流*/public ObjectWriteResponse putObjectbyStream(String bucketName, String objectName,InputStream inputStream)throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(inputStream, inputStream.available(), -1).build());}/*** 创建文件夹或目录** @param bucketName 存储桶* @param objectName 目录路径*/public ObjectWriteResponse putDirObject(String bucketName, String objectName)throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(new ByteArrayInputStream(new byte[]{}), 0, -1).build());}/*** @Title: uploadFile* @Description: (获取上传文件信息上传文件)* @author 云诺* [file 上传文件(MultipartFile), bucketName 桶名]*/public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {JSONObject res = new JSONObject();res.put("code", 0);//判断文件是否为空if (null == file || 0 == file.getSize()) {res.put("msg", "上传文件不能为空");return res;}//判断存储桶是否存在 不存在则创建createBucket(bucketName);//文件名String originalFilename = file.getOriginalFilename();//新的文件名 = 存储桶文件名_时间戳.后缀名String fileName = bucketName + "_" +System.currentTimeMillis() +originalFilename.substring(originalFilename.lastIndexOf("."));//开始上传putObjectbyStream(bucketName, fileName, file.getInputStream());res.put("code", 1);res.put("fileName", fileName);res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);return res;}/*** @param filepath 文件路径,bucketName 桶名 Uuid UUID* @param uuid 文件UUID* @param bucketName com.alibaba.fastjson.JSONObject* @Title: uploadFile* @Description: 获取文件路径上传文件* @Title: uploadFile* @Description:*/public JSONObject uploadFile(String filepath, String uuid, String bucketName) throws Exception {// MultipartFile file = null;File oldFile = new File(filepath);FileInputStream fileInputStream = new FileInputStream(oldFile);
// file = new MockMultipartFile(oldFile.getName(), oldFile.getName(), fileInputStream);JSONObject res = new JSONObject();res.put("code", 0);//判断文件是否为空if (StringUtils.isNull(oldFile)) {res.put("msg", "上传文件不能为空");return res;}//判断存储桶是否存在 不存在则创建createBucket(bucketName);//文件名String originalFilename = oldFile.getName();//新的文件名 = 存储桶文件名_时间戳_UUID.后缀名String fileName = bucketName + "_" +System.currentTimeMillis() + "_" + uuid +originalFilename.substring(originalFilename.lastIndexOf("."));//开始上传putObjectbyStream(bucketName, fileName, fileInputStream);res.put("code", 1);res.put("fileName", fileName);res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);return res;}/*** @param bucketName com.alibaba.fastjson.JSONObject* @Title: uploadFile* @Description: 获取文件路径上传文件* *@param filepath 文件路径,bucketName 桶名*/public JSONObject uploadFile(String filepath, String bucketName) throws Exception {// MultipartFile file = null;File oldFile = new File(filepath);FileInputStream fileInputStream = new FileInputStream(oldFile);
// file = new MockMultipartFile(oldFile.getName(), oldFile.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);JSONObject res = new JSONObject();res.put("code", 0);//判断文件是否为空if (StringUtils.isNull(oldFile)) {res.put("msg", "上传文件不能为空");return res;}//判断存储桶是否存在 不存在则创建createBucket(bucketName);//文件名String originalFilename = oldFile.getName();//新的文件名 = 存储桶文件名_时间戳_UUID.后缀名String fileName = bucketName + "_" +System.currentTimeMillis() +originalFilename.substring(originalFilename.lastIndexOf("."));//开始上传putObjectbyStream(bucketName, fileName, fileInputStream);res.put("code", 1);res.put("fileName", fileName);res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);return res;}/*** @Title: getAllBuckets* @Description: (获取全部bucket)* []*/public List<Bucket> getAllBuckets() throws Exception {return client().listBuckets();}/*** @param bucketName bucket名称* @Title: removeBucket* @Description: (根据bucketName删除信息)* [bucketName] 桶名*/public void removeBucket(String bucketName) throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());}/*** @param bucketName bucket名称* @param objectName ⽂件名称* @param expires 过期时间 <=7* @return url* @Title: getObjectURL* @Description: (获取 ⽂ 件外链)* [bucketName 桶名, objectName 文件名, expires 时间<=7]*/public String getObjectUrl(String bucketName, String objectName, Integer expires) throws Exception {return client().presignedGetObject(bucketName, objectName, expires);}/*** @param bucketName bucket名称* @param objectName ⽂件名称* @return ⼆进制流* @Title: getObject* @Description: (获取文件)* [bucketName 桶名, objectName 文件名]*/public InputStream getObject(String bucketName, String objectName) throws Exception {return client().getObject(bucketName, objectName);}/*** @param bucketName bucket名称* @param objectName ⽂件名称* @param stream ⽂件流* @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject* @Title: putObject* @Description: (上传文件)* [bucketName 桶名, objectName 文件名, stream ⽂件流]*/public void putObject(String bucketName, String objectName, InputStream stream) throwsException {putObjectbyStream(bucketName,objectName,stream);}/*** 上传⽂件** @param bucketName bucket名称* @param objectName ⽂件名称* @param stream ⽂件流* @param size ⼤⼩* @param contextType 类型* @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#putObject* @Title: putObject* @Description: $(文件流上传文件)* [bucketName, objectName, stream, size, contextType]*/public void putObject(String bucketName, String objectName, InputStream stream, longsize, String contextType) throws Exception {putObjectbyStream(bucketName,objectName,stream);}/*** @param bucketName bucket名称* @param objectName ⽂件名称* @throws Exception https://docs.minio.io/cn/java-client-api-reference.html#statObject* @Title: getObjectInfo* @Description: (获取文件信息)* [bucketName, objectName]*/public ObjectStat getObjectInfo(String bucketName, String objectName) throws Exception {return client().statObject(bucketName, objectName);}/*** @param bucketName bucket名称* @param objectName ⽂件名称* @throws Exception https://docs.minio.io/cn/java-client-apireference.html#removeObject* @Title: removeObject* @Description: (删除文件)* [bucketName, objectName]*/public void removeObject(String bucketName, String objectName) throws Exception {client().removeObject(bucketName, objectName);}
}
Minio工具类 MinioUtils相关推荐
- SpringBoot整和MinIO以及MinIO工具类
安装 docker run -p 9000:9000 -p 9090:9090 --net=bridge --name minio -d --restart=always -e "MINIO ...
- springboot+minio文件上传下载工具类
引入依赖 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId ...
- 对象存储Minio 客户端工具类,实现文件上传、图像压缩、图像添加水印
在搭建好了MInio分布式对象存储集群后,官方提供了MInio Client 各类语言的SDK,但是无法直接使用需要进一步封装,这里将JAVA 版的的SDK结合自身业务做个简单封装. Minio 中文 ...
- Java实现minio文件服务web在线解压上传工具类
前言 文章中的web解压工具类结合了minio文件服务,上传解压文件过程中,先解压成文件流,再将解压的文件又上传到minio文件服务器上.(不同本地文件服务,可以直接用文件copy的方式,cpoy到服 ...
- java日期转化工具类
package com.rest.ful.utils;import java.text.DateFormat; import java.text.ParseException; import java ...
- java数据类型相互转换工具类
package com.rest.ful.utils;import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...
- 客快物流大数据项目(五十六): 编写SparkSession对象工具类
编写SparkSession对象工具类 后续业务开发过程中,每个子业务(kudu.es.clickhouse等等)都会创建SparkSession对象,以及初始化开发环境,因此将环境初始化操作封装成工 ...
- [JAVA EE] Thymeleaf 常用工具类
Thymeleaf 提供了丰富的表达式工具类,例如: #strings:字符串工具类 #dates:时间操作和时间格式化 #numbers:格式化数字对象的方法 #bools:常用的布尔方法 #str ...
- httpclient工具类,post请求发送json字符串参数,中文乱码处理
在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...
最新文章
- log4j2的配置文件log4j2.xml笔记
- 中表名字必须大写吗_小白也能学会的C-枯燥且必须的语法
- swoole mysql 协程_Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
- [转] 视频直播前端方案
- webpack 的基本使用—— 创建列表隔行变色项目||在项目中安装和配置 webpack
- 【机器学习应用】将在2020年实现盈利的12个基于AI和ML的最佳应用创意
- asp.net导出GridView数据到Excel
- Python实现PLA(感知机)
- java 读取ppt文件_java使用poi读取ppt文件和poi读取excel、word示例
- 单片机外围模块漫谈之二,如何提高ADC转换精度
- 华为交换机默认vlan都是通的吗_华为设备二层交换技术——Hybrid接口详解
- 数据源绑定控件的Row/ItemDataBound事件
- 计算机学院 迎新口号,清华大学迎新标语
- eclipse 导入appcompat-v7 包
- 在 Windows 容器中使用 gMSA
- Sturts2【四】 StrutsPrepareAndExecuteFilter源码分析二
- PostgreSQL数据库常用SQL语句
- 正点原子 STM32芯片解读 M3_Bath
- aria2Android服务器教程,Aria2自动更新BT Tracker服务器列表的方法
- 关于C语言从键盘输入内容到数组