MinIO 上传文件工具类

import cn.hutool.crypto.digest.MD5;
import io.minio.MinioClient;
import io.minio.policy.PolicyType;
import org.springframework.web.multipart.MultipartFile;

import java.util.Objects;
/**
 * minio 相关的工具方法
 * @author RondoChan
 * @date 2022/9/30 14:18
 */
public class MinioUtil {
    /**
     *
     * @param minioEndpoint minio 服务器地址
     * @param minioAccessKey accessKey
     * @param minioSecretKey secretKey
     * @param minioBucketName 桶名称
     * @param file 要上传的文件
     * @return 上传后文件的 url
     * @throws Exception 可能会上传失败
     */
    public static String uploadFile2Minio(String minioEndpoint, String minioAccessKey, String minioSecretKey,String minioBucketName,MultipartFile file) throws Exception {
        String[] split = Objects.requireNonNull(file.getOriginalFilename()).split("\\.");
        String type = split.length == 2 ? split[1] : "";
        return uploadFile2Minio(minioEndpoint, minioAccessKey, minioSecretKey,minioBucketName,file, type);
    }

    /**
     * 上传文件到 minio
     *
     * @param file 上传的文件
     * @param type 文件后缀
     * @return 上传文件储存在 minio 服务器的 url
     */
    public static String uploadFile2Minio(String minioEndpoint, String minioAccessKey, String minioSecretKey,String minioBucketName,MultipartFile file, String type) throws Exception {
        MinioClient client = new MinioClient(minioEndpoint, minioAccessKey, minioSecretKey);
        if (!client.bucketExists(minioBucketName)) {
            client.makeBucket(minioBucketName);
            client.setBucketPolicy(minioBucketName, "*.*", PolicyType.READ_ONLY);
        }
        // 根据文件流创建文件名称,防止文件内容相同时重复上传
        String objectName = MD5.create().digestHex(file.getInputStream()) + "." + type;
        // 不重复上传,奇怪,居然没有提供判断文件是否存在的 api
        try {
            client.statObject(minioBucketName, objectName);
        } catch (Exception e) {
            client.putObject(minioBucketName, objectName, file.getInputStream(), file.getContentType());
        }
        return minioEndpoint + "/" + minioBucketName + "/" + objectName;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容