范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

还在用FastDFS?快来试试MinIO

  最近在做一个项目,需要用到文件服务做文件存储和共享,之前就听说过MinIO,一直没尝试过,用过给我最大的感受就是部署真是方便了,提供了一个UI界面,操作很方便,发现真香
  什么是MinIO
  具体介绍看网站介绍MinIO | 高性能, Kubernetes 原生对象存储
  安装部署
  安装部署比较简单,可以用docker也可以下载安装包,我这里用ubuntu,官网地址比较慢,用中国的镜像站,MinIO中国加速站的使用用办法:将官网下载地址中的dl.min.io改为dl.minio.org.cn下载安装包安装minio启动minio服务,设置文件存储路径为:/opt/minio/data ,并设置UI控制台端口号9001,注意MinIO服务端口默认为9000,客户端接入时连接端口是9000,别成控制台端口9001 wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio_20230227181045.0.0_amd64.deb dpkg -i minio_20230227181045.0.0_amd64.deb sudo nohup minio server /opt/minio/data --console-address ":9001" 2>&1 &
  启动后,通过浏览器访问127.0.0.1:9001,可以进入控制台,默认用户和密码是minioadmin
  MinIO控制台
  那怎么传文件了?首先,创建一个Bucket(存储桶),然后选择这个bucket可以上传了,bucket可以理解为一个容器,文件放在bucket里,可以按需建,比如不同类型或者不同模块的文件,放在不同的bucket里,这里创建一个public的bucket
  bucket创建好之后,就可以往bucket里上传文件了
  上传后,点击文件可以下载、在线预览,分享,删除
  配置密钥,客户端接入时使用
  SpringBoot集成MinIO
  前面介绍MinIO的一些基本操作,下面来通过代码来演示,springboot怎么集成MinIO
  首先创建maven项目,引入MinIO的客户端              io.minio             minio             8.5.2 
  在配置文件里添加MinIO的接入参数minio:   #minio服务地址   endpoint: http://192.168.19.130:9000   #认证   accessKey: jDLyzTvkq3HsKleF   #认证密钥   secretKey: n3QC5VYcicQGPqKQVYksZalkBRZxUDSa   #默认存储桶   bucket: public
  添加MinIO配置类@Configuration public class MinioConfig {      @Value("${minio.endpoint}")     private String endpoint;      @Value("${minio.accessKey}")     private String accessKey;      @Value("${minio.secretKey}")     private String secretKey;      @Bean     public MinioClient minioClient() {         return MinioClient.builder()                 .endpoint(endpoint)                 .credentials(accessKey, secretKey)                 .build();     } }
  编写MinIO工具类 @Component public class MinioHelper {       @Value("${minio.bucket}")     private String defaultBucketName;      @Autowired     private MinioClient minioClient;      /**      * 存储桶是否存在      *      * @param bucketName 存储桶名字      * @return      */     public boolean bucketExists(String bucketName) {         try {             return minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());         } catch (Exception e) {             e.printStackTrace();         }         return false;     }      /**      * 创建bucket      *      * @param bucketName 存储桶名字      */     public boolean createBucket(String bucketName) {         try {             if (!bucketExists(bucketName)) {                 minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());             }             return true;         } catch (Exception e) {             e.printStackTrace();         }         return false;     }      /**      * 删除bucket      *      * @param bucketName 存储桶名字      * @return      */     public boolean removeBucket(String bucketName) {         try {             if (!bucketExists(bucketName)) {                 minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucketName).build());                 return true;             }         } catch (Exception e) {             e.printStackTrace();         }         return false;     }      /**      * 上传文件      *      * @param bucketName  存储桶名字      * @param inputStream 输入流      * @param filePath    文件路径,可以是文件名,也可以带上需要存储的路径,例如年月 2023/03/upload.txt      * @return true成功false失败      */     public ObjectWriteResponse upload(String bucketName, InputStream inputStream, String filePath) {         if (StringUtils.isBlank(bucketName)) {             bucketName = defaultBucketName;         }         createBucket(bucketName);         try {             return minioClient.putObject(PutObjectArgs.builder().bucket(bucketName).object(filePath).stream(inputStream, inputStream.available(), -1).build());         } catch (Exception e) {             e.printStackTrace();         }         return null;     }      /**      * 下载文件      *      * @param bucketName 存储桶名字      * @param filePath   文件路径      * @return 文件输入流      */     public InputStream download(String bucketName, String filePath) {         try {             if (StringUtils.isBlank(bucketName)) {                 bucketName = defaultBucketName;             }             return minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(filePath).build());         } catch (Exception e) {             e.printStackTrace();         }         return null;     }      /**      * 删除文件      *      * @param bucketName 存储桶名字      * @param filePath   文件路径      * @return true成功false失败      */     public boolean removeFile(String bucketName, String filePath) {         try {             if (StringUtils.isBlank(bucketName)) {                 bucketName = defaultBucketName;             }             minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(filePath).build());             return true;         } catch (Exception e) {             e.printStackTrace();         }         return false;     }      /**      * 列出存储桶里所有文件,包括文件夹中的子文件      *      * @param bucketName 存储桶名字      * @return 文件列表      */     public Iterable> list(String bucketName) {         return minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).recursive(true).build());     } }
  编写测试用例,进行测试@SpringBootTest public class MinioHelperTest {     @Autowired     MinioHelper minioHelper;      @Test     void createBucket() {         minioHelper.createBucket("test");     }      @Test     void removeBucket() {         minioHelper.removeBucket("test");     }      @Test     void upload() throws FileNotFoundException {         FileInputStream fileInputStream = new FileInputStream("C:minioupload.png");         minioHelper.upload("public", fileInputStream, "2023/03/upload.png");     }      @Test     void download() throws IOException {         InputStream inputStream = minioHelper.download("public", "2023/03/upload.png");         FileOutputStream outputStream = new FileOutputStream("d:upload.png");         outputStream.write(IOUtils.toByteArray(inputStream));     }      @Test     void removeFile() {         minioHelper.removeFile("public", "2023/03/upload.png");     }      @Test     void list() throws Exception {         Iterable> iterable = minioHelper.list("public");         for (Result result : iterable) {             System.out.println("result = " + result.get().objectName());         }     } }
  全文结束,谢谢阅读,用你发财的小手,点赞收藏吧!

我们生活的现实世界是被模拟出来的虚拟世界?细思极恐光速,每秒30万公里,确实很快。但无论有多快,光速毕竟是有限的,而有限的光速也决定了我们看到的任何事物其实都是他们的过去时,我们看到的都是过去已经发生的情景。这点很好理解,比如说,如何用互联网思维让馒头店上市?卖馒头很简单,一个买一个卖,一手交钱一手交货,最基本的商业模式就形成了,但如果是用互联网思维,比如馒头本身不能收费又或者没有中间商赚差价,会出现怎样的奇观?一起来看看!所谓互联网思OK镜首次被纳入集采多家公司回应北京商报讯(记者姚倩)10月27日早盘,眼科概念股集体重挫。消息面上,河北省医用药品器械采购中心发布通知,该省拟于近期开展20种医用耗材集中带量采购,组织开展信息填报工作。热门高毛广东省东莞市麻涌镇骑迹水乡品味丰收之旅古梅乡韵令人沉醉原标题广东省东莞市麻涌镇骑迹水乡品味丰收之旅(引题)古梅乡韵令人沉醉(主题)中国文化报驻广东记者谭志红金秋时节,广东省东莞市麻涌镇又到了收获的季节,金黄饱满的稻谷透着香甜的甘蔗油润10月26日收评3000点保卫战与昨天其实没有太大的区别,这里说实话再分析盘面和基本面其实已经没有什么意义,3000点以下,几乎所有的板块都超跌,只要大盘能企稳,基本都会有反弹需要的。记住3000点以下套也要套在拒绝中国设计或制造的芯片?传微软戴尔已要求供应链整理清单10月26日消息,据中国台湾工商时报,近期业界传出消息称,美国厂商微软戴尔率先要求供应链整理清单,详列列出使用中的半导体有哪些来自中国大陆芯片设计公司哪些芯片由中国大陆晶圆代工厂生6亿u被爆仓,10万人是受害者今天有6亿u被爆仓了,有一半是二饼太子哥的hy,看了下详细数据,多半都是开空被爆了。所以为什么我看空的时候总是会提前平了看情况再追呢,因为趋势是随时会产生变化的,千万不可以太自信的莆田地区人类活动史逾2万年,木兰溪流域考古有新发现你知道吗?木兰溪流域考古调查有新发现莆田地区人类活动史逾2万年一起来看看吧木兰溪流域遗址分布图众多史前文化遗址的发现,佐证木兰溪流域是福建地区古人类活动较为频繁的区域,也是南北史前从曾经狂胜山东男篮49分到如今惨败!上海男篮到底怎么了?北京时间10月25日晚,CBA联赛迎来山东男篮与上海男篮的问题对决。结果,在仅仅9个月前,还可以大比分轻松战胜山东男篮的上海队,很快就败下阵来,三节战罢,就已经落后24分,整个第四当今胖子的中医辩证当前,由于生活水平的迅速提高,丰富的饮食让人措手不及,大家吃起来是随心所欲,最终出现了大量肥胖的人群,随之,高血压高血脂及高血糖的三高患者如雨后春笋般的涌了出来,体重增加是危害人们吃完饭就开始犯困,是大脑供血不足?自查,可能是这2个原因春困秋乏在部分人身上体现得很明显,会随着季节变化身体有不一样的改变。春季,秋季等大多气候适宜,环境良好,在这种状态下人更容易犯困。不过,有的人表现为吃完饭就犯困,想要睡觉,有这种表
说话尖酸刻薄,挑人短处,骂人,说人是非,会损害自己的健康吗?一个人如果说话总是尖酸刻薄,总喜欢挑人短处,喜欢咒骂他人,说人是非,我们没有正知见前,其实也就会认为是件小事,有时觉得不过就是心直口快,其实我们嘴巴说不出好话时,其实是我们自己内心乡约盐阜畅享村游快带上一家人出发吧国庆嗨翻天叮咚!您有一份国庆乡村游大礼包请笑纳我和我的祖国一刻也不能分割无论我走到哪里都流出一首赞歌国庆假期即将来临七天小长假相约盐城的你是否还没做好假期出游计划呢?下面就请您收下(经济)广西铁海联运衔接一带一路赋能经济高质量发展近年来,中铁南宁局集团有限公司向海往南朝北挺进,优化开行西部陆海新通道铁海联运班列与一带一路无缝衔接,帮助广西及西部省市产品远销海外国外货物进入国内,推动经济高质量发展。中铁南宁局南充一分钟,心动不止60秒!日升月落,片影流光,一分钟转瞬即逝,却定格着无限的精彩。在南充,目之所及,皆是诗与远方!花一分钟来看看TA的美,我相信,心动绝对不止这60秒我见青山多妩媚,料青山见我应如是。南充是从双轮驱动的快手电商,看快手整体战略的提升虽然全球股市一路跌个不停,但是其中还是有一些不错的公司标的值得深入研究和耐心等待。我个人认为快手是其中之一。原因也很简单,现在是一个属于短视频的时代,虽然快手和抖音相比有差距,但无天气预报今日10月1号暴雨大雨中心确认,今年是冷秋?看农谚咋说导读天气预报今日10月1号暴雨大雨中心确认,今年是冷秋?看农谚咋说。时光如梭转瞬即逝,眨眼间今天已是10月1号,迎来了一年一度举国欢庆普天同庆的日子国庆节,并且伴随着全国人民七天小郭艾伦不要蹭热点了!不成家立业情商值得推敲,多想想男篮吧如果是一个男人不成家结婚娶妻生子,实际上就不算一个真正成年人,因为单身考虑事情不周全,心智也不能算成熟。在中国男篮中一直单身的郭艾伦就是这个例子,因为没有女朋友或妻子管着,自己想干杭州出发1h车程可达,睡进临安山林里的避世民宿丨无它心舍从2019年至今,无它心舍从未停止过脚步,一直寻觅一处舒适自在安逸的心灵安放之地。于是,有了与绍兴新昌的会面。在浙江版张家界十九峰旁的小村落里,满眼的山林惬意,时令瓜果,让人心生欢亘古长安河南林州的红旗渠9月25日游览了红旗渠。红旗渠是一项浩大的水利工程,主要的组成有拦河溢流坝引水隧洞引水渠进水闸泄洪冲沙闸等,为自流引水的水利工程。红旗渠的引水渠大多建在太行山的悬崖峭壁上,蜿蜒曲折街道上喜气洋洋旅游界充满信心港澳热烈开展国庆系列活动来源环球时报环球时报驻香港特约记者叶蓝据香港星岛日报28日报道,本周六是国庆节,当天香港将举行隆重的升旗礼和庆祝国庆73周年酒会。香港警方将在国庆前夕及当天派出70008000警力兴业证券张启尧市场已是底部区域,看好新半军消费当前市场已是底部区域,是性价比比较高的区域。9月28日,兴业证券策略研究中心总经理首席策略分析师张启尧在兴业证券2022年秋季策略会上作出上述表示。展望四季度,张启尧认为,从估值股