package com.example.minio.common.utils;
import cn.hutool.core.date.DateUtil;
import com.example.minio.common.config.ParamConfig;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.Bucket;
import io.minio.messages.DeleteObject;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
/**
* @Author: HOUJL
* @Date: 2023/2/14
* @Description:
*/
@Slf4j
@Component
public class MinIoUtil {
public static MinioClient minioClient;
public final ParamConfig paramConfig;
public MinIoUtil(ParamConfig paramConfig) {
this.paramConfig = paramConfig;
}
/**
* 初始化minio配置
*/
@PostConstruct
public void init() {
try {
log.info("Minio Initialize........................");
minioClient = MinioClient.builder().endpoint(paramConfig.getEndpoint()).credentials(paramConfig.getAccessKey(), paramConfig.getSecretKey()).build();
createBucket(paramConfig.getBucketName());
log.info("Minio Initialize........................successful");
} catch (Exception e) {
log.error("初始化minio配置异常: 【{}】", e.fillInStackTrace());
}
}
/****************************** Operate Bucket Start ******************************/
/**
* 判断bucket是否存在
*/
@SneakyThrows(Exception.class)
public boolean bucketExists(String bucketName) {
return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
}
/**
* 创建bucket
*/
@SneakyThrows(Exception.class)
public void createBucket(String bucketName) {
boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
if (!isExist) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
}
/**
* 获取全部bucket
*/
@SneakyThrows(Exception.class)
public List<Bucket> getAllBuckets() {
return minioClient.listBuckets();
}
/**
* 根据bucketName获取其相关信息
*
* @param bucketName
* @return
*/
@SneakyThrows(Exception.class)
public Optional<Bucket> getBucket(String bucketName) {
return getAllBuckets().stream().filter(b -> b.name().equals(bucketName)).findFirst();
}
/**
* 根据bucketName删除Bucket,true:删除成功; false:删除失败,文件或已不存在
*
* @param bucketName
* @throws Exception
*/
@SneakyThrows(Exception.class)
public void removeBucket(String bucketName) {
minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());
}
/****************************** Operate Bucket End ******************************/
/**
* 上传本地文件
*
* @param bucketName 存储桶
* @param fileName 对象名称
* @param filePath 本地文件路径
* @return
*/
@SneakyThrows(Exception.class)
public ObjectWriteResponse uploadFile(String bucketName, String fileName, String filePath) {
return minioClient.uploadObject(
UploadObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.filename(filePath)
.build());
}
/**
* 上传文件
* 返回可以直接预览文件的URL
*/
public String uploadFile(MultipartFile file) {
try {
//如果存储桶不存在则创建
if (!bucketExists(paramConfig.getBucketName())) {
createBucket(paramConfig.getBucketName());
}
String originalFilename = file.getOriginalFilename();
if ("".equals(originalFilename)) {
originalFilename = file.getName();
}
//保证文件不重名(并且没有特殊字符)
String fileName = DateUtil.format(new Date(), "yyyyMMddHHmmss") + "_" + originalFilename;
minioClient.putObject(PutObjectArgs.builder()
.bucket(paramConfig.getBucketName())
.object(fileName)
.stream(file.getInputStream(), file.getInputStream().available(), -1)
.contentType(file.getContentType())
.build());
return getPreviewFileUrl(paramConfig.getBucketName(), fileName);
} catch (Exception e) {
log.error(e.getMessage(), e);
return "";
}
}
@SneakyThrows(Exception.class)
public String putFile(String bucketName, String fileName, InputStream stream) {
return upload(bucketName, fileName, stream, "application/octet-stream");
}
/**
* 文件上传
* 返回下载文件url地址 和下面upload方法仅传参不同
* bucketName 也可以直接从ParamConfig对象中获取
*/
@SneakyThrows(Exception.class)
public String upload(String bucketName, String fileName, InputStream stream, String contentType) {
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(stream, stream.available(), -1)
.contentType(contentType)
.build());
return getPreviewFileUrl(bucketName, fileName);
}
/**
* 文件上传
* 返回下载文件url地址 和上面upload方法仅传参不同
*/
@SneakyThrows(Exception.class)
public String upload(String bucketName, MultipartFile file) {
final InputStream is = file.getInputStream();
final String fileName = file.getOriginalFilename();
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(is, is.available(), -1)
.contentType(file.getContentType())
.build());
is.close();
return getPreviewFileUrl(bucketName, fileName);
}
/**
* 删除文件
*
* @param bucketName: 桶名
* @param fileName: 文件名
*/
@SneakyThrows(Exception.class)
public void deleteFile(String bucketName, String fileName) {
minioClient.removeObject(
RemoveObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.build());
}
/**
* 批量删除
*
* @param fileNames
*/
@SneakyThrows(Exception.class)
public void removeFiles(List<String> fileNames) {
removeFiles(paramConfig.getBucketName(), fileNames);
}
/**
* @param bucketName
* @param fileNames
*/
@SneakyThrows(Exception.class)
public void removeFiles(String bucketName, List<String> fileNames) {
Stream<DeleteObject> stream = fileNames.stream().map(DeleteObject::new);
minioClient.removeObjects(RemoveObjectsArgs.builder().bucket(bucketName).objects(stream::iterator).build());
}
/**
* 获取minio文件的下载或者预览地址
* 取决于调用本方法的方法中的PutObjectOptions对象有没有设置contentType
*
* @param bucketName: 桶名
* @param fileName: 文件名
*/
@SneakyThrows(Exception.class)
public String getPreviewFileUrl(String bucketName, String fileName) {
GetPresignedObjectUrlArgs args = GetPresignedObjectUrlArgs.bu
没有合适的资源?快使用搜索试试~ 我知道了~
Minio对象存储及Springboot整合Minio分片上传文章-代码
共100个文件
class:38个
java:36个
xml:5个
5星 · 超过95%的资源 需积分: 2 13 下载量 179 浏览量
2023-02-23
09:57:04
上传
评论
收藏 101.68MB RAR 举报
温馨提示
Minio对象存储及Springboot整合Minio分片上传文章----代码
资源推荐
资源详情
资源评论
收起资源包目录
Minio对象存储及Springboot整合Minio分片上传文章-代码 (100个子文件)
MinIoUtil.class 13KB
MinioHelper.class 9KB
FileUploadInfoServiceImpl.class 8KB
FileUploadInfo.class 7KB
MinioFileChunkUploadInfoDO.class 7KB
JsonResult.class 7KB
ParamConfig.class 5KB
HongBeanUtils.class 5KB
MinioFileUploadInfoDTO.class 4KB
MinioController.class 4KB
GetMinioUploadInfoParam.class 4KB
CustomMinioClient.class 4KB
MinioFileChunkUploadInfoParam.class 4KB
MinioApplicationTests.class 4KB
MinioFileChunkUploadInfoServiceImpl.class 3KB
SliceUploadController.class 3KB
MinioFileUploadInfoServiceImpl.class 3KB
JsonResult$Builder.class 3KB
MinioOperationResult.class 3KB
MinioFileChunkUploadInfoDTO.class 3KB
MergeMinioMultipartParam.class 3KB
SwaggerConfig.class 3KB
MinioConfig.class 2KB
MessageEnum.class 2KB
MinioUploadInfo.class 2KB
WebMvcConfig.class 2KB
CommonEnums$MinioFileStatusEnum.class 1KB
BusinessException.class 1KB
BaseErrorException.class 1KB
IMinioFileChunkUploadInfoMapper.class 1KB
MinioFileUploadInfoParam.class 941B
IMinioFileChunkUploadInfoService.class 939B
IFileUploadInfoService.class 938B
MinioApplication.class 827B
IMinioFileUploadInfoService.class 746B
IMinioFileUploadInfoMapper.class 579B
CommonEnums.class 441B
FileUploadInfoMapper.class 331B
mvnw.cmd 7KB
.gitignore 395B
minio.iml 27KB
minio-1.0.0.RELEASE.jar 115.37MB
maven-wrapper.jar 57KB
MinIoUtil.java 10KB
FileUploadInfoServiceImpl.java 6KB
MinioHelper.java 6KB
JsonResult.java 5KB
CustomMinioClient.java 4KB
MinioFileUploadInfoServiceImpl.java 3KB
MinioController.java 3KB
MinioApplicationTests.java 3KB
MinioFileChunkUploadInfoServiceImpl.java 2KB
SliceUploadController.java 2KB
HongBeanUtils.java 2KB
SwaggerConfig.java 2KB
MinioFileChunkUploadInfoDO.java 1KB
FileUploadInfo.java 1KB
MinioConfig.java 1KB
IFileUploadInfoService.java 1KB
IMinioFileChunkUploadInfoMapper.java 1020B
IMinioFileUploadInfoService.java 931B
MessageEnum.java 928B
IMinioFileChunkUploadInfoService.java 810B
WebMvcConfig.java 795B
ParamConfig.java 725B
BaseErrorException.java 670B
GetMinioUploadInfoParam.java 662B
BusinessException.java 521B
IMinioFileUploadInfoMapper.java 514B
MergeMinioMultipartParam.java 445B
MinioApplication.java 406B
MinioOperationResult.java 401B
MinioFileChunkUploadInfoParam.java 389B
MinioUploadInfo.java 384B
MinioFileUploadInfoDTO.java 362B
CommonEnums.java 344B
MinioFileChunkUploadInfoDTO.java 308B
FileUploadInfoMapper.java 289B
MinioFileUploadInfoParam.java 252B
spring-configuration-metadata.json 1KB
inputFiles.lst 3KB
createdFiles.lst 2KB
inputFiles.lst 94B
createdFiles.lst 46B
HELP.md 721B
mvnw 10KB
minio-1.0.0.RELEASE.jar.original 66KB
log4j.properties 2KB
log4j.properties 2KB
maven-wrapper.properties 233B
pom.properties 62B
V20230221__minio_upload.sql 3KB
V20230221__minio_upload.sql 3KB
MinioFileChunkUploadInfoMapper.xml 2KB
MinioFileChunkUploadInfoMapper.xml 2KB
MinioFileUploadInfoMapper.xml 1KB
MinioFileUploadInfoMapper.xml 1KB
pom.xml 1KB
application.yml 6KB
application.yml 5KB
共 100 条
- 1
榔娃
- 粉丝: 5237
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 青岛大学人工智能实验二 利用α-β搜索的博弈树算法编写一字棋游戏
- ### 1、项目介绍 本项目Scrapy进行数据爬取,并使用Django框架+PyEcharts实现可视化大屏 效果如下:
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 289ssm-mysql-jsp 计算机课程实验管理系统.zip(可运行源码+数据库文件+文档)
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 20-天天果园项目.rar
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- 自助购药小程序源代码含文档
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页