“djh”
2024-11-11 8458e64aab474c0fc2f49ae4ff22fb11ce5cf6e2
exam-common/src/main/java/com/gkhy/exam/common/utils/MinioUtils.java
@@ -6,6 +6,10 @@
import com.gkhy.exam.common.config.MinioConfig;
import io.minio.*;
import io.minio.http.Method;
import io.minio.messages.DeleteError;
import io.minio.messages.DeleteObject;
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.util.FastByteArrayOutputStream;
@@ -13,9 +17,13 @@
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class MinioUtils {
    @Autowired
    private MinioClient minioClient;
@@ -27,15 +35,33 @@
     * @return boolean
     */
    public Boolean bucketExists(String bucketName) {
        Boolean found;
        Boolean found=false;
        try {
            found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
            log.error("minio校验bucket失败:{}",e.getMessage());
        }
        return found;
    }
    /**
     * 文件上传 上传完成后请关闭文件流
     *
     * @param fileName 带后缀的文件名 检验日期yyyyMMdd加16位随机码
     * @param stream   文件流 要上传文件的流
     */
    public String fileUploader( String fileName, InputStream stream) {
        try {
            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).stream(stream, stream.available(), -1).contentType("application/octet-stream").build();
            // 使用putObject上传一个文件到文件分类
            minioClient.putObject(objectArgs);
        }catch (Exception e) {
            log.error("minio上传文件失败:{}",e.getMessage());
            return null;
        }
        return fileName;
    }
    /**
     * 文件上传
@@ -43,7 +69,7 @@
     * @param file 文件
     * @return Boolean
     */
    public String upload(MultipartFile file) {
    public String uploadFile(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        if (StringUtils.isBlank(originalFilename)){
            throw new RuntimeException();
@@ -56,7 +82,7 @@
            //文件名称相同会覆盖
            minioClient.putObject(objectArgs);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("minio上传文件失败:{}",e.getMessage());
            return null;
        }
        return objectName;
@@ -74,7 +100,7 @@
            String url = minioClient.getPresignedObjectUrl(build);
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("预览文件失败:{}",e.getMessage());
        }
        return null;
    }
@@ -110,4 +136,59 @@
            e.printStackTrace();
        }
    }
    /**
     * 删除文件
     * @param fileName
     * @return
     */
    public boolean removeFile(String fileName){
        try {
            RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(minioConfig.getBucketName())
                    .object(fileName).build();
            minioClient.removeObject(removeObjectArgs);
            return true;
        }catch (Exception e){
            return false;
        }
    }
    /**
     * 删除文件夹
     * @param folderName
     * @return
     */
    public boolean removeFolder(String folderName){
        try {
            if(!folderName.endsWith("/")){
                folderName=folderName+"/";
            }
            ListObjectsArgs listObjectsArgs=ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).prefix(folderName).build();
            Iterable<Result<Item>> results = minioClient.listObjects(listObjectsArgs);
            List<DeleteObject> objectNames=new ArrayList<>();
            for(Result<Item> result:results){
                objectNames.add(new DeleteObject(result.get().objectName()));
            }
            if(!objectNames.isEmpty()) {
                RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(minioConfig.getBucketName())
                        .objects(objectNames).build();
                Iterable<Result<DeleteError>> results1 = minioClient.removeObjects(removeObjectsArgs);
                for (Result<DeleteError> result : results1) {
                    DeleteError error = result.get();
                    log.error("Error in deleting object {},{}", error.objectName(), error.message());
                }
            }
            RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(minioConfig.getBucketName())
                    .object(folderName).build();
            minioClient.removeObject(removeObjectArgs);
            return true;
        }catch (Exception e){
            return false;
        }
    }
}