侧边栏壁纸
  • 累计撰写 98 篇文章
  • 累计创建 20 个标签
  • 累计收到 3 条评论

Minio学习笔记

林贤钦
2021-02-25 / 0 评论 / 0 点赞 / 408 阅读 / 3,349 字
温馨提示:
本文最后更新于 2021-03-03,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Minio学习笔记

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

Minio提供了非常方便,友好的界面,并且文档也是非常丰富,具体可以参考它的docs

为什么选择Minio

传送门:MinIO很强-让我放弃FastDFS拥抱MinIO的8个理由

docker安装minio

->docker pull minio/minio
->docker run -d -p 9000:9000 --name minio -e "MINIO_ACCESS_KEY=admin" -e "MINIO_SECRET_KEY=admin123456" -v /mnt/data:/data -v /mnt/config:/root/.minio minio/minio server /data

spring使用minio

gradle引入jar:

implementation "io.minio:minio:$8.0.3",

配置文件:

# Minio配置
minio:
    url: http://服务器ip:9000
    accessKey: admin
    secretKey: admin123456
    bucketName: test

配置类:

/**
 * 功能描述:Minio 配置信息
 * @author lxq
 * @version 1.00
 */
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig {
    /**
     * 服务地址
     */
    private String url;

    /**
     * 用户名
     */
    private String accessKey;

    /**
     * 密码
     */
    private String secretKey;

    /**
     * 存储桶名称
     */
    private String bucketName;

    @Bean
    public MinioClient getMinioClient()
    {
        try {
            return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
        }
        catch (final Exception e) {
            throw new BaseException("init minio fail");
        }

    }


    public String getUrl()
    {
        return url;
    }

    public void setUrl(String url)
    {
        this.url = url;
    }

    public String getAccessKey()
    {
        return accessKey;
    }

    public void setAccessKey(String accessKey)
    {
        this.accessKey = accessKey;
    }

    public String getSecretKey()
    {
        return secretKey;
    }

    public void setSecretKey(String secretKey)
    {
        this.secretKey = secretKey;
    }

    public String getBucketName()
    {
        return bucketName;
    }

    public void setBucketName(String bucketName)
    {
        this.bucketName = bucketName;
    }
}

接口:

public interface FileService {
    /**
     * 文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     * @throws Exception 异常
     */
    public String uploadFile(MultipartFile file) throws Exception;
}

实现类:

@Primary
@Service
public class MinioFileServiceImpl implements FileService{
    private final MinioConfig minioConfig;
    private final MinioClient client;
    public MinioFileServiceImpl(MinioConfig minioConfig, MinioClient client){
        this.minioConfig=minioConfig;
        this.client=client;
    }

    @Override
    public String uploadFile(MultipartFile file) throws Exception {
        String fileName = FileUploadUtils.extractFilename(file);
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(minioConfig.getBucketName())
                .object(fileName)
                .stream(file.getInputStream(), file.getSize(), -1)
                .contentType(file.getContentType())
                .build();
        client.putObject(args);
        return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
    }
}

最后说一句:minio使用就是这么简单,具体看官方文档

0

评论区