Upload and download of minio file server

1. Introduce dependencies

<dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.1</version>
        </dependency>

File configuration under the config package

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Component("minIoProperties")
@ConfigurationProperties (prefix = "minio")
public class MinIoProperties {<!-- -->

    private String uri;
    private String endpoint;
    private String accessKey;
    private String secretKey;
}

yml file configuration

Tools utils

@Slf4j
@Component("minIoUtils")
@Configuration
@EnableConfigurationProperties({<!-- -->MinIoProperties. class})
public class MinIoUtils {<!-- -->

    @Resource(name = "minIoProperties")
    private MinIoProperties minIo;

    public MinIoUtils(@Qualifier("minIoProperties") MinIoProperties minIo) {<!-- -->
        this.minIo = minIo;
    }

    private MinioClient minioClient;

    /**
     * Initialize minio configuration
     */
    @PostConstruct
    public void init() {<!-- -->
        try {<!-- -->
            minioClient = new MinioClient.Builder().endpoint(minIo.getEndpoint())
                    .credentials(minIo.getAccessKey(), minIo.getSecretKey())
                    .build();
        } catch (Exception e) {<!-- -->
            log.error("File server - connection failed" + e);
            throw new AppException(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "File Server - Connection failed");
        }
    }

    /**
     * Determine whether the bucket exists
     *
     * @param bucketName: bucket name
     * @return
     */
    public boolean bucketExists(String bucketName) {<!-- -->
        try {<!-- -->
            return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        } catch (Exception e) {<!-- -->
            log.error("File Server - Failed to check whether the folder exists, bucketName={}, exception={}", bucketName, e);
            throw new AppException(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "File Server - Failed to check whether the folder exists");
        }
    }

    /**
     * Create buckets
     *
     * @param bucketName: bucket name
     */
    public void makeBucket(String bucketName) {<!-- -->
        try {<!-- -->
            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            ;
            if (!isExist) {<!-- -->
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
            }
        } catch (Exception e) {<!-- -->
            log.error("File server - failed to create folder, bucketName={}, exception={}", bucketName, e);
            throw new AppException(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "File server - failed to create folder");
        }
    }


    /**
     * bucket police
     *
     * @param bucketName: bucket name
     */
    public void bucketPolice(String bucketName) {<!-- -->
        try {<!-- -->
            boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (!isExist) {<!-- -->
                throw new AppException(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "File server - folder does not exist");
            }

            StringBuilder builder = new StringBuilder();
            builder.append("{\\
");
            builder.append(" "Statement": [\\
");
// builder. append(" {\\
");
// builder.append(" "Action": [\\
");
// builder.append(" "s3:GetBucketLocation",\\
");
// builder. append(" "s3:ListBucket"\\
");
// builder.append(" ],\\
");
// builder. append(" "Effect": "Allow",\\
");
// builder. append(" "Principal": "*",\\
");
// builder.append(" "Resource": "arn:aws:s3:::my-bucketname"\\
");
// builder.append(" },\\
");
            builder.append(" {\\
");
            builder.append(" "Action": "s3:GetObject",\\
");
            builder.append(" "Effect": "Allow",\\
");
            builder.append(" "Principal": "*",\\
");
            builder.append(" "Resource": "arn:aws:s3:::" + bucketName + "/*"\\
");
            builder.append(" }\\
");
            builder.append(" ],\\
");
            builder.append(" "Version": "2012-10-17"\\
");
            builder.append("}\\
");

            minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(builder.toString()).build());

        } catch (Exception e) {<!-- -->
            log.error("File Server - Failed to create folder access policy, bucketName={}, exception={}", bucketName, e);
            throw new AppException(String.valueOf(HttpStatus.INTERNAL_SERVER_ERROR.value()), "File server - failed to create folder access policy");
        }
    }

    /**
     * File Upload
     *
     * @param inputStream
     * @param bucketName
     * @param contentType
     * @param objectName
     * @return
     */
    public Boolean putObject(InputStream inputStream, String bucketName, String contentType, String objectName) {<!-- -->
        try {<!-- -->
            if (!bucketExists(bucketName)) {<!-- -->
                makeBucket(bucketName);
            }

            // Upload a file to the bucket using putObject
// minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType).
// stream(inputStream, -1, 1024 * 1024 * 10).build());
            minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(objectName).contentType(contentType).
                    stream(inputStream, -1,1024 * 1024 * 10).build());
            return true;
        } catch (Exception e) {<!-- -->
            log.error("File server - failed to upload file, bucketName={}, contentType={}, objectName={}, exception={}", bucketName, contentType, objectName, e);
            throw new AppException(String.valueOf(500), "File server - failed to upload file");
        }
    }

    /**
     * Delete Files
     *
     * @param bucketName
     * @param objectName
     */
    public void removeObject(String bucketName, String objectName) {<!-- -->
        try {<!-- -->
            minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(objectName).build());
        } catch (Exception e) {<!-- -->
            log.error("File server - failed to delete file, bucketName={}, objectName={}, exception={}", bucketName, objectName, e);
            throw new AppException(String.valueOf(500), "File server - failed to delete file");
        }
    }

    /**
     * get file
     *
     * @param bucketName
     * @param objectName
     */
    public GetObjectResponse getObject(String bucketName, String objectName) {<!-- -->
        try {<!-- -->
            return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
        } catch (Exception e) {<!-- -->
            log.error("File server - Failed to get the file, bucketName={}, objectName={}, exception={}", bucketName, objectName, e);
            throw new AppException(String.valueOf(500), "File server - failed to get the file");
        }
    }

    /**
     * Get the 7-day validity period url of the file
     *
     * @param bucketName
     * @param objectName
     * @return
     */
    public String getFileUrl(String bucketName, String objectName) {<!-- -->
        try {<!-- -->
            String url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().bucket(bucketName).object(objectName).
                    method(Method.GET).expiry(60 * 60 * 24 * 7).build());
            return url;
        } catch (Exception e) {<!-- -->
            log.error("File server - Failed to get file url, bucketName={}, objectName={}, exception={}", bucketName, objectName, e);
            throw new AppException(String.valueOf(500), "File server - failed to get file url");
        }
    }
}

So far, the upload and download of files in the project can be realized by introducing the method in the tool class
refer to:
https://lizhou.blog.csdn.net/article/details/106039407