一、引子

在我们做后台管理系统中,不可避免的会存储一些文件、视频、图片等等大文件数据。当然,市面上提供了很多OSS云存储服务,但是很多情况下,中小型企业不愿意花这个钱去购买云存储服务器,这个时候希望搭建一个本地的文件管理服务器【要求不花钱,开源】。本来用的七牛云Oss,结果嫌太贵,舍弃了,自己的在内网搞一个文件管理系统凑合用得了。


此时,MinIO就应运而生了。


二、MinIO使用

这里我用的是Windows的部署方式,主要就是简单,主要是我现在手中镜像也没有,就用Windows凑合用算了。

2.1 直接去官网下载

下载地址请点击这里,这个时候我们可以看一下这个官网。提供了诸多的运行方式…

java项目 海量文件存储方案 java文件存储服务_上传

2.2 启动

下载完毕之后就是一个MinIO.exe的执行文件,在Windows的环境中,我们的启动方式是先跳转到MinIO.exe的文件夹下,然后执行cmd命令

minio.exe server D:\xxxxxxx

这个后面【D:\xxxxxxx】的是你要存放你上传文件的路径,就是一个放置文件的文件夹。

java项目 海量文件存储方案 java文件存储服务_java_02


第一个红色框框就是启动的命令,以及将要放置的文件目录地址。

第二个框框就是MinIO管理系统的登录地址,账号密码都是minioadmin。
然后下面还有一个本地的动态监听端口,也是一个管理登录网址。

java项目 海量文件存储方案 java文件存储服务_服务器_03


进入管理系统就发现,这里跟七牛云是差不多的。

bucket可以理解成根目录。

其他的可以参考官网进行详细的学习,这里只做简单使用的演示。

三、集成Java

文件上传的话就简单的几行代码就可以了,可以参考一下。

@Value("${minio.access_key}")
    private String accessKey;

    @Value("${minio.secret_key}")
    private String secretKey;

    @Value("${minio.url}")
    private String endpoint;

    @Value("${minio.bucket}")
    private String bucket;



boolean bucketExists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());
            if (!bucketExists) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());
            }
            PutObjectArgs objectArgs = PutObjectArgs.builder().bucket(bucket)
                    .object(path)
                    .stream(inputStream, inputStream.available(), -1)
                    .contentType(MimeUtil.getMimeType(path))
                    .build();
            //文件名称相同会覆盖
            minioClient.putObject(objectArgs);

那些秘钥参数都写在配置文件中,然后先判断一下这个bucket是否存在,不存在则创建桶,执行上传的逻辑。这里面的文件类型,contentType()。
我是根据上传的文件后缀直接填进去的,比如是xxx.jpg结尾的,我上传就是jpg。同理视频和excel也是如此。

文件下载的话没有进行任何的逻辑处理,因为我是在内网搭建的,只要保证搭建的那台主机能够与局域网之内的其他PC能够互相通信即可,直接ip+文件路径就可以直接预览下载。

四、小坑

MinIO在Windows中启动的时候,如果我们上传了文件且在管理系统中也可以进行文件的预览和下载,但是在我们Java项目中文件确实是预览不到,这个时候就是bucket的权限有问题。

为了简单一点,直接使用【*】不加任何的限制进行读取和写入【注意我这里是内网环境,所以一切都是按照最简单的来】。

登入MinIO。

java项目 海量文件存储方案 java文件存储服务_服务器_04

按照这个格式修改一下就可以了。

我们测试一下ip+文件路径是否可以访问~~~~~

java项目 海量文件存储方案 java文件存储服务_服务器_05


java项目 海量文件存储方案 java文件存储服务_java_06


这里没有任何问题。

这里在补充一下,在控制台设置MinIO的账号和密码。

D:\xxxx\minlo>set MINIO_ROOT_USER=admin

D:\xxxx\minlo>set MINIO_ROOT_PASSWORD=xxxx

执行更改之后,再去执行启动命令,这样MinIO的账号密码就是会变成我们更改之后的。


ok,就这样。