123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- package org.jeecg.common.util;
- import io.minio.*;
- import lombok.extern.slf4j.Slf4j;
- import org.jeecg.common.util.filter.FileTypeFilter;
- import org.jeecg.common.util.filter.StrAttackFilter;
- import org.springframework.web.multipart.MultipartFile;
- import java.io.InputStream;
- import java.net.URLDecoder;
- /**
- * minio文件上传工具类
- */
- @Slf4j
- public class MinioUtil {
- private static String minioUrl;
- private static String minioName;
- private static String minioPass;
- private static String bucketName;
- public static void setMinioUrl(String minioUrl) {
- MinioUtil.minioUrl = minioUrl;
- }
- public static void setMinioName(String minioName) {
- MinioUtil.minioName = minioName;
- }
- public static void setMinioPass(String minioPass) {
- MinioUtil.minioPass = minioPass;
- }
- public static void setBucketName(String bucketName) {
- MinioUtil.bucketName = bucketName;
- }
- public static String getMinioUrl() {
- return minioUrl;
- }
- public static String getBucketName() {
- return bucketName;
- }
- private static MinioClient minioClient = null;
- /**
- * 上传文件
- * @param file
- * @return
- */
- public static String upload(MultipartFile file, String bizPath, String customBucket) {
- String file_url = "";
- //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击
- bizPath=StrAttackFilter.filter(bizPath);
- //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符,防止攻击
- String newBucket = bucketName;
- if(oConvertUtils.isNotEmpty(customBucket)){
- newBucket = customBucket;
- }
- try {
- initMinio(minioUrl, minioName,minioPass);
- // 检查存储桶是否已经存在
- if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(newBucket).build())) {
- log.info("Bucket already exists.");
- } else {
- // 创建一个名为ota的存储桶
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(newBucket).build());
- log.info("create a new bucket.");
- }
- //update-begin-author:liusq date:20210809 for: 过滤上传文件类型
- FileTypeFilter.fileTypeFilter(file);
- //update-end-author:liusq date:20210809 for: 过滤上传文件类型
- InputStream stream = file.getInputStream();
- // 获取文件名
- String orgName = file.getOriginalFilename();
- if("".equals(orgName)){
- orgName=file.getName();
- }
- orgName = CommonUtils.getFileName(orgName);
- String objectName = bizPath+"/"
- +( orgName.indexOf(".")==-1
- ?orgName + "_" + System.currentTimeMillis()
- :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."))
- );
- // 使用putObject上传一个本地文件到存储桶中。
- if(objectName.startsWith("/")){
- objectName = objectName.substring(1);
- }
- PutObjectArgs objectArgs = PutObjectArgs.builder().object(objectName)
- .bucket(newBucket)
- .contentType("application/octet-stream")
- .stream(stream,stream.available(),-1).build();
- minioClient.putObject(objectArgs);
- stream.close();
- file_url = minioUrl+newBucket+"/"+objectName;
- }catch (Exception e){
- log.error(e.getMessage(), e);
- }
- return file_url;
- }
- /**
- * 文件上传
- * @param file
- * @param bizPath
- * @return
- */
- public static String upload(MultipartFile file, String bizPath) {
- return upload(file,bizPath,null);
- }
- /**
- * 获取文件流
- * @param bucketName
- * @param objectName
- * @return
- */
- public static InputStream getMinioFile(String bucketName,String objectName){
- InputStream inputStream = null;
- try {
- initMinio(minioUrl, minioName, minioPass);
- GetObjectArgs objectArgs = GetObjectArgs.builder().object(objectName)
- .bucket(bucketName).build();
- inputStream = minioClient.getObject(objectArgs);
- } catch (Exception e) {
- log.info("文件获取失败" + e.getMessage());
- }
- return inputStream;
- }
- /**
- * 删除文件
- * @param bucketName
- * @param objectName
- * @throws Exception
- */
- public static void removeObject(String bucketName, String objectName) {
- try {
- initMinio(minioUrl, minioName,minioPass);
- RemoveObjectArgs objectArgs = RemoveObjectArgs.builder().object(objectName)
- .bucket(bucketName).build();
- minioClient.removeObject(objectArgs);
- }catch (Exception e){
- log.info("文件删除失败" + e.getMessage());
- }
- }
- /**
- * 获取文件外链
- * @param bucketName
- * @param objectName
- * @param expires
- * @return
- */
- public static String getObjectURL(String bucketName, String objectName, Integer expires) {
- initMinio(minioUrl, minioName,minioPass);
- try{
- GetPresignedObjectUrlArgs objectArgs = GetPresignedObjectUrlArgs.builder().object(objectName)
- .bucket(bucketName)
- .expiry(expires).build();
- String url = minioClient.getPresignedObjectUrl(objectArgs);
- return URLDecoder.decode(url,"UTF-8");
- }catch (Exception e){
- log.info("文件路径获取失败" + e.getMessage());
- }
- return null;
- }
- /**
- * 初始化客户端
- * @param minioUrl
- * @param minioName
- * @param minioPass
- * @return
- */
- private static MinioClient initMinio(String minioUrl, String minioName,String minioPass) {
- if (minioClient == null) {
- try {
- minioClient = MinioClient.builder()
- .endpoint(minioUrl)
- .credentials(minioName, minioPass)
- .build();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return minioClient;
- }
- /**
- * 上传文件到minio
- * @param stream
- * @param relativePath
- * @return
- */
- public static String upload(InputStream stream,String relativePath) throws Exception {
- initMinio(minioUrl, minioName,minioPass);
- if(minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
- log.info("Bucket already exists.");
- } else {
- // 创建一个名为ota的存储桶
- minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
- log.info("create a new bucket.");
- }
- PutObjectArgs objectArgs = PutObjectArgs.builder().object(relativePath)
- .bucket(bucketName)
- .contentType("application/octet-stream")
- .stream(stream,stream.available(),-1).build();
- minioClient.putObject(objectArgs);
- stream.close();
- return minioUrl+bucketName+"/"+relativePath;
- }
- }
|