美文网首页
MinIO 上传文件工具类

MinIO 上传文件工具类

作者: nesanero | 来源:发表于2022-10-18 17:34 被阅读0次
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;
    }
}

相关文章

网友评论

      本文标题:MinIO 上传文件工具类

      本文链接:https://www.haomeiwen.com/subject/nbhszrtx.html