当前位置: 首页 > 后端技术 > Java

Gitee倒下了,我自己做了一个免费的分布式存储服务

时间:2023-04-01 16:42:27 Java

大家好,我是陈老师~最近Gitee真的废了。昨天建仓,不能公开。必须申请开源并通过审核。可以公开吗?这是在接受采访吗?先是在博客园,现在在Gitee交流群里,小伙伴们也在吐槽,辛苦赚来的图床也没用。有小伙伴建议直接用付费的,比如七牛云,但是技能多到让你应接不暇。你怎么能自己建一个?不漂亮!今天来安利一个开源免费的对象存储套件MinIO,自己动手打造一个免费的存储系统,顺便实现一个图床。什么是MinIO?Minio是一个用Golang编写的开源对象存储套件,基于ApacheLicensev2.0开源协议。虽然它很轻,但它具有良好的性能。兼容AmazonS3云存储服务接口。可以方便的与其他应用结合,如NodeJS、Redis、MySQL等。一、应用场景MinIO的应用场景既可以作为私有云对象存储服务,也可以作为云对象的网关层存储,无缝连接到AmazonS3或MicrosoftAzure。2.特点高性能:作为一款高性能存储,在标准硬件条件下,其读写速率分别可以达到55Gb/s和35Gb/s。并且MinIO支持目标文件可以是任意大小,从几kb到最大5T。可扩展性:不同的MinIO集群可以组成联邦,形成全局命名空间,支持跨越多个数据中心。云原生:容器化、基于K8S的编排、多租户支持。AmazonS3兼容:使用AmazonS3v2/v4API。可以使用MinioSDK、MinioClient、AWSSDK和AWSCLI访问Minio服务器。SDK支持:GOSDK:https://github.com/minio/mini...JavaSDK:https://github.com/minio/mini...PythonSDK:https://github.com/minio/mini。..图形界面:有支持纠删码的操作页面:MinIO使用纠删码和校验和来防止硬件错误和静默数据污染。在最高冗余配置下,即使1/2的磁盘丢失也可以恢复数据。功能非常强大。这篇文章只是一个扔掉。有兴趣的朋友可以自行探索~安装MinIO非常简单。我这里是用docker安装的。步骤如下:1、获取镜像,执行命令:dockerpullminio/minio2。启动镜像,执行命令如下:dockerrun-p9000:9000-p9001:9001--nameminio-d--restart=always-e"MINIO_ACCESS_KEY=admin"-e"MINIO_SECRET_KEY=admin"-v/home/data:/data-v/home/config:/root/.miniominio/minioserver--console-address":9000"--address":9001"/data命令解释如下:-p:9000是图形界面的端口,9001是APIPort的端口,使用SDK连接时需要MINIO_ACCESS_KEY:指定图形界面的用户名MINIO_SECRET_KEY:指定图形界面的密码按照上面两个步骤启动成功。3、图形界面操作安装成功后,直接访问地址:http://ip:9000/login,如下:输入用户名和密码登录成功后,如下:菜单比较多,所以我不会在这里详细介绍它们。笔者直接在Buckets菜单中点击Createabucketintest作为test,如下图:并将该bucket的隐私规则设置为public,如下:MinIO已安装并设置成功。SpringBoot集成了MinIO来上传文件。MinIO虽然在图形界面提供了手动上传操作,但也可以通过SDK进行上传。下面介绍SpringBoot如何集成MinIO来上传文件。1、获取accessKey和secretKey这里的accessKey和secretKey并不是图形界面的登录名和密码。获取非常简单,直接在图形界面操作即可,如下图:2.添加依赖添加MinIO的依赖,如下:io.miniominio8.2.13.添加配置这里笔者对SDK做了一个简单的封装,将提供案例源码。列出一些代码。在aplication.yml配置中添加MInIO相关配置,如下:minio:#访问urlendpoint:http://192.168.47.148#API端口port:9001#秘钥accessKey:HQGWFYLWGC6FVJ0CQFOGsecretKey:pUGhAgQhZDxJaLmN3uz65YX7Bb3FyLdLglsecfCr1name:test#bucketname我给了一个默认的桶名image-size:10485760#我在这里设置了图像文件的最大大小file-size:1073741824#这里设置的是文件的最大大小4.新增上传文件接口笔者在这里定义了一个上传文件接口,如下:;@PostMapping("/upload")publicStringuploadFile(MultipartFilefile,StringbucketName){StringfileType=FileTypeUtils.getFileType(file);if(fileType!=null){returnminioService.putObject(file,bucketName,fileType);}return"文件格式不支持,请确认格式后再上传!!!";}}源码已上传至GitHub,关注公众号:码猿科技专栏,回复关键字:9535搞定!5、测试以上4个步骤是否已经集成。我们直接调用接口上传图片试试看,如下:接口返回的URL为文件的访问地址,直接在浏览器中输入即可访问。在MInIO中也可以看到存储的文件,如下图:如果需要分享给其他人,也可以手动分享。有效期为7天。过了有效期就失效了,如下:源码已经上传到GitHub,关注公众号:码猿技术专栏,回复关键字:9535搞定!总结MinIO虽然是一个开源项目,但是它的功能非常强大。它可以用来在小项目中实现对象存储,你也可以使用MinIO来构建一个免费的图像床。图片地址可以直接返回给大家,搭建图床就不用多说了,自己试试吧~最后说一句(不要白嫖,求关注)的每一篇文章小陈用心输出,已经写了3个专栏,整理成PDF,获取方式如下:《Spring Cloud 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词SpringCloud进阶获取!《Spring Boot 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词SpringBoot进阶获取!《Mybatis 进阶》PDF:关注公众号:【码猿技术专栏】回复关键词Mybatis进阶获取!另外陈的《Spring Cloud Alibaba 实战》视频专栏已经完成,需要订阅的小伙伴点击左下角阅读原文。