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相关推荐

  1. SpringBoot整和MinIO以及MinIO工具类

    安装 docker run -p 9000:9000 -p 9090:9090 --net=bridge --name minio -d --restart=always -e "MINIO ...

  2. springboot+minio文件上传下载工具类

    引入依赖 <dependency><groupId>io.minio</groupId><artifactId>minio</artifactId ...

  3. 对象存储Minio 客户端工具类,实现文件上传、图像压缩、图像添加水印

    在搭建好了MInio分布式对象存储集群后,官方提供了MInio Client 各类语言的SDK,但是无法直接使用需要进一步封装,这里将JAVA 版的的SDK结合自身业务做个简单封装. Minio 中文 ...

  4. Java实现minio文件服务web在线解压上传工具类

    前言 文章中的web解压工具类结合了minio文件服务,上传解压文件过程中,先解压成文件流,再将解压的文件又上传到minio文件服务器上.(不同本地文件服务,可以直接用文件copy的方式,cpoy到服 ...

  5. java日期转化工具类

    package com.rest.ful.utils;import java.text.DateFormat; import java.text.ParseException; import java ...

  6. java数据类型相互转换工具类

    package com.rest.ful.utils;import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...

  7. 客快物流大数据项目(五十六): 编写SparkSession对象工具类

    编写SparkSession对象工具类 后续业务开发过程中,每个子业务(kudu.es.clickhouse等等)都会创建SparkSession对象,以及初始化开发环境,因此将环境初始化操作封装成工 ...

  8. [JAVA EE] Thymeleaf 常用工具类

    Thymeleaf 提供了丰富的表达式工具类,例如: #strings:字符串工具类 #dates:时间操作和时间格式化 #numbers:格式化数字对象的方法 #bools:常用的布尔方法 #str ...

  9. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

最新文章

  1. log4j2的配置文件log4j2.xml笔记
  2. 中表名字必须大写吗_小白也能学会的C-枯燥且必须的语法
  3. swoole mysql 协程_Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比
  4. [转] 视频直播前端方案
  5. webpack 的基本使用—— 创建列表隔行变色项目||在项目中安装和配置 webpack
  6. 【机器学习应用】将在2020年实现盈利的12个基于AI和ML的最佳应用创意
  7. asp.net导出GridView数据到Excel
  8. Python实现PLA(感知机)
  9. java 读取ppt文件_java使用poi读取ppt文件和poi读取excel、word示例
  10. 单片机外围模块漫谈之二,如何提高ADC转换精度
  11. 华为交换机默认vlan都是通的吗_华为设备二层交换技术——Hybrid接口详解
  12. 数据源绑定控件的Row/ItemDataBound事件
  13. 计算机学院 迎新口号,清华大学迎新标语
  14. eclipse 导入appcompat-v7 包
  15. 在 Windows 容器中使用 gMSA
  16. Sturts2【四】 StrutsPrepareAndExecuteFilter源码分析二
  17. PostgreSQL数据库常用SQL语句
  18. 正点原子 STM32芯片解读 M3_Bath
  19. aria2Android服务器教程,Aria2自动更新BT Tracker服务器列表的方法
  20. 关于C语言从键盘输入内容到数组

热门文章

  1. 《我的前半生》读书笔记
  2. 这届90后从不轻言放弃
  3. VisualBox解决CentOS中yum安装失败的问题
  4. 读书计划 现在开始……
  5. 手机短信息被误删怎么办?最常用的恢复小技巧
  6. 熬夜总结了 “HTML5画布” 的知识点(共10条)
  7. 【Html + Js + CSS——电流壁纸(源码+特效)】
  8. 安全的发展趋势-物联网安全参考模型
  9. 用css设置文字的描边效果
  10. 从 .NET 到 JavaScript —— 纯前端报表控件 ActiveReportsJS 焕新登场