zhangrui.i
zhangrui.i
发布于 2024-05-30 / 8 阅读
0
0

minio文件上传

1. 配置类

@Configuration
public class MinIOConfiguration {

    /**
     * Minio 配置
     * @return
     */
    @Bean
    public MinioClient minioClient() {
        // 创建 MinioClient 客户端
        return MinioClient.builder()
                .endpoint(MinioProperties.ENDPOINT)
                .credentials(MinioProperties.ACCESS_KEY, MinioProperties.SECRET_KEY)
                .build();
    }

}

2. 实体类

@Data
@Component
@ConfigurationProperties(value = "minio")
public class MinioProperties implements InitializingBean {
    private String endpoint;
    private String bucket;
    private String accessKey;
    private String secretKey;

    public static String ENDPOINT;
    public static String BUCKET;
    public static String ACCESS_KEY;
    public static String SECRET_KEY;

    @Override
    public void afterPropertiesSet() throws Exception {
        ENDPOINT = endpoint;
        BUCKET = bucket;
        SECRET_KEY = secretKey;
        ACCESS_KEY = accessKey;
    }

}

3. 工具类


import io.minio.BucketExistsArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.RemoveObjectArgs;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;

@Component
@Slf4j
public class MinioUtil {


    @Resource
    private MinioClient minioClient;

    private final static String separator = "/";
    private static final String domain="域名地址";


    public String builderFilePath(String dirPath, String fileName) {
        StringBuilder stringBuilder = new StringBuilder(50);
        if (!org.springframework.util.StringUtils.isEmpty(dirPath)) {
            stringBuilder.append(dirPath).append(separator);
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String todayStr = simpleDateFormat.format(new Date());
        stringBuilder.append(todayStr).append(separator);
        stringBuilder.append(fileName);
        return stringBuilder.toString();
    }


    /**
     * 查看存储bucket是否存在
     * @return boolean
     */
    public Boolean bucketExists(String bucketName) {
        Boolean found;
        try {
            found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return found;
    }

    /**
     * 根据路径删除文件
     *
     * @return boolean
     */
    public boolean removeObject(String path) {
        int tiktokIndex = path.indexOf("tiktok");
        if (tiktokIndex == -1) {
            // 如果未找到 "tiktok",返回错误信息
            return false;
        }
        String filePath = path.substring(tiktokIndex + "tiktok".length());
        String bucket = MinioProperties.BUCKET;
        try {
            boolean exists = bucketExists(bucket);
            if (exists) {
                minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(filePath).build());
                return true;
            }
        } catch (Exception e) {
            log.error("removeObject", e);
        }
        return false;
    }

    /**
     * 文件上传
     *
     * @param file 文件
     * @return Boolean
     */
    public String upload(MultipartFile file,String dirPath) {
        String originalFilename = file.getOriginalFilename();
        if (StringUtils.isBlank(originalFilename)){
            throw new RuntimeException();
        }
       // String fileName =  originalFilename.substring(0,originalFilename.indexOf("."));
        String filePath = builderFilePath(dirPath,originalFilename);

        try {
            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(MinioProperties.BUCKET).object(filePath)
                    .stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
            //文件名称相同会覆盖
            minioClient.putObject(objectArgs);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return "http://"+domain+MinioProperties.BUCKET+separator+filePath;

    }

}


评论