在我们做后台管理系统中,不可避免的会存储一些文件、视频、图片等等大文件数据。当然,市面上提供了很多OSS云存储服务,但是很多情况下,中小型企业不愿意花这个钱去购买云存储服务器,这个时候希望搭建一个本地的文件管理服务器【要求不花钱,开源】。本来用的七牛云Oss,结果嫌太贵,舍弃了,自己的在内网搞一个文件管理系统凑合用得了。
此时,MinIO就应运而生了。
这里我用的是Windows的部署方式,主要就是简单,主要是我现在手中镜像也没有,就用Windows凑合用算了。
下载地址请点击这里,这个时候我们可以看一下这个官网。提供了诸多的运行方式…
下载完毕之后就是一个MinIO.exe的执行文件,在Windows的环境中,我们的启动方式是先跳转到MinIO.exe的文件夹下,然后执行cmd命令
minio.exe server D:\xxxxxxx
这个后面【D:\xxxxxxx】的是你要存放你上传文件的路径,就是一个放置文件的文件夹。
第一个红色框框就是启动的命令,以及将要放置的文件目录地址。
第二个框框就是MinIO管理系统的登录地址,账号密码都是minioadmin。
然后下面还有一个本地的动态监听端口,也是一个管理登录网址。
进入管理系统就发现,这里跟七牛云是差不多的。
bucket可以理解成根目录。
其他的可以参考官网进行详细的学习,这里只做简单使用的演示。
文件上传的话就简单的几行代码就可以了,可以参考一下。
@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。
按照这个格式修改一下就可以了。
我们测试一下ip+文件路径是否可以访问~~~~~
这里没有任何问题。
这里在补充一下,在控制台设置MinIO的账号和密码。
D:\xxxx\minlo>set MINIO_ROOT_USER=admin
D:\xxxx\minlo>set MINIO_ROOT_PASSWORD=xxxx
执行更改之后,再去执行启动命令,这样MinIO的账号密码就是会变成我们更改之后的。
ok,就这样。