返回顶部
首页 > 资讯 > 后端开发 > Python >使用Java Minio搭建自己的文件系统详解
  • 944
分享到

使用Java Minio搭建自己的文件系统详解

2024-04-02 19:04:59 944人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言1、MiNIO介绍2、Minio安装与启动3、Minio控制台创建存储桶4、存储桶权限5、控制台实现文件的上传与下载6、使用SpringBoot与Minio整合实现文件的增删

前言

最近接了一个项目,甲方不愿意买服务器,但是呢,项目又必须要用文件功能。所以很巧,最近又刚好看到了Minio这个牛逼的工具。正好借此机会记录下来此次操作的全部流程。

本次涉及到的功能有:

  • Minio的安装与启动
  • 控制台的使用以及存储桶的创建
  • 存储桶的使用权限说明
  • 使用控制台实现文件上传与下载
  • (重点)使用springboot与Minio整合实现文件的增删改查

本次使用环境:Centos7.6+finalshell+java

1、Minio介绍

如果你听过这个,那么你直接跳到第二小节看使用说明。如果你不知道这个,但是你最近也正在找一款文件存储的工具,那么你可以先看看这个的介绍。

Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。区别于分布式存储系统,minio的特色在于简单、轻量级,对开发者友好。

阿里云对象存储你应该清楚,这个和OSS的区别就是,OSS收费,这个是你自己搭建的,不收费,只占磁盘大小。其他的功能都是一毛一样的。

2、Minio安装与启动

首先,我们得先去找到下载地址

  • 下载地址:https://dl.min.io/server/minio/release/linux-amd64/minio

使用我们的终端工具连接上我们的服务器。

步骤:

1.找一个目录,用来存放我们的minio文件

2.使用wget命令,通过下载地址下载下载我们的文件


 wget Https://dl.min.io/server/minio/release/linux-amd64/minio

3.给minio这个文件赋予权限,作为文件启动


chmod +x minio

4.使用./minio server start启动

在这里插入图片描述

当你能看到这个界面的时候,说明你就成功了。

小提示1:
下面的两个红色的并不是报错,而是警告,也可以是一个建议。
第一句翻译:控制台断点的侦听端口并不是固定的,请使用 --console-address指定端口启动
第二句翻译:默认初始凭证账号和密码是minioadmin和minioadmin 你可以在环境变量中去更改他。但是我这儿就不修改了,如果你想修改你可以去profile下面使用export命名来加上他说的那个变量名来指定账号和密码。
小提示2:
如果你是本地虚拟机,启动后只需要使用ip:9000端口来实现访问,如果访问不了,请关掉防火墙,命令:
systemctl stop firewalld
如果你是云服务器,请放行9000端口和他提示出来的端口。9000作为api端口是不变的,但是你同样可以指定修改他,控制台端口经过我自己测试,他每次启动都会发生改变,所以我们还是建议使用指定端口启动。
小提示3:
我们上面的启动命令,他启动好了之后日志可以指定到目录去存储,只需要将./minio server start 命令更换成 ./minio server /home/minio/data 其中/home/minio/data是我自己定义的目录,你可以随便定义。
第二:启动后会占用控制台,我们也可以将他调整成为后台启动,加上指定的端口,我们就可以完成自定义的设置。具体启动命令如下:
nohup ./minio server --console-address ':41169' /home/minio/data/ > /home/minio/data/minio.log 2>&1 &
意思就是,指定控制台端口为41169,并且生成日志文件到/home/minio/data目录下的minio.log中

访问ip:9000进入登录界面 使用默认账号进行登录

在这里插入图片描述

在这里插入图片描述

3、Minio控制台创建存储桶

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这样就创建好了我们的存储桶。

4、存储桶权限

在创建好存储桶之后,我们为了使用远程连接来访问使用。所以有必要去修改一下存储桶的权限。

在这里插入图片描述

我们点击最下面的那个Rules,然后点击右上角创建一个访问规则。可以使用精准匹配,也可以使用通配符。

在这里插入图片描述

前缀我们使用* 这样可以匹配全部访问用户,下面的权限我们使用读写。

5、控制台实现文件的上传与下载

在这里插入图片描述

我们点到左边的功能栏,然后选择右边我们刚创建的存储桶。然后,,我觉得接下来的操作我都不用细说你们应该都会玩了。

在这里插入图片描述

在这里插入图片描述

同样,在上传成功后,也提供下载与预览功能。

6、使用Springboot与Minio整合实现文件的增删查改

6.1、创建项目

6.2、添加依赖


<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>6.0.11</version>
</dependency>

6.3、创建自定义属性与配置类


minio:
  accesskey: minioadmin
  secreTKEy: minioadmin
  url: http://ip:9000
  bucketname: zxy-images

@Component
@Data
public class MinioProperties {
    
    @Value("${minio.url}")
    private String url;
    
    @Value("${minio.accesskey}")
    private String accessKey;
    
    @Value("${minio.secretkey}")
    private String secretKey;
}

@Configuration
@Slf4j
public class Minioconfig {
    @Resource
    private MinioProperties minioProperties;
    @Bean
    public MinioClient getMinioClient(){
        try {
            return new MinioClient(minioProperties.getUrl(), minioProperties.getAccessKey(), minioProperties.getSecretKey());
        } catch (InvalidEndpointException | InvalidPortException e) {
            e.printStackTrace();
            log.info("-----创建Minio客户端失败-----");
            return null;
        }
    }
}

6.4、功能实现

6.4.1、文件上传


public void upload(MultipartFile file) throws IOException, XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, InvalidArgumentException, InvalidResponseException, InternalException, NoResponseException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException {
        if (file == null || file.getSize() == 0 || file.isEmpty()) {
            throw new RuntimeException("上传文件为空,请重新上传");
        }
        // 获取文件名
        String filename = file.getOriginalFilename();
        assert filename != null;
        
        String newFilename = UUID.randomUUID().toString() + "|" + filename + filename.substring(filename.lastIndexOf("."));
        minioClient.putObject(bucketName, newFilename, file.getInputStream(), file.getSize(), null, null, file.getContentType());
    }

6.4.2、文件下载


public InputStream download(String fileName, HttpServletResponse response) {
        InputStream inputStream = null;
        // 根据文件名拿到minio中的文件对象
        try {
            ObjectStat object = minioClient.statObject(bucketName, fileName);
            // 设置响应头类型
            response.setContentType(object.contentType());
            inputStream = minioClient.getObject(bucketName, fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }

6.4.3、查询全部文件


public Iterable<Result<Item>> listObjects() {
        try {
            return minioClient.listObjects(bucketName);
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        }
        return null;
    }

6.4.4、删除指定文件


public void deleteFile(String fileName){
        try {
            minioClient.removeObject(bucketName,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        } 
    }

总结

其实操作并不难,你如果发现了我的操作全都是使用的minioClient来实现的时候,你的重心就应该去放在这个类上面,里面所有的方法都有注释,看一遍就能学会。

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 使用Java Minio搭建自己的文件系统详解

本文链接: https://lsjlt.com/news/135623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用Java Minio搭建自己的文件系统详解
    目录前言1、Minio介绍2、Minio安装与启动3、Minio控制台创建存储桶4、存储桶权限5、控制台实现文件的上传与下载6、使用Springboot与Minio整合实现文件的增删...
    99+
    2024-04-02
  • docker搭建minio及java sdk使用过程详解
    目录1minio简洁2 docker搭建minio2.1 单节点2.2 多节点部署3 java sdk使用minio1minio简洁 MinIO 是一款高性能、分布式的对象存储系统....
    99+
    2024-04-02
  • 如何使用elasticsearch搭建自己的搜索系统
    这期内容当中小编将会给大家带来有关如何使用elasticsearch搭建自己的搜索系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是e...
    99+
    2024-04-02
  • 详解如何在Win系统中搭建自己的Git远程仓库
    在这个信息化的时代,程序员们必然会经常使用版本控制工具来方便管理自己的代码,Git作为分布式版本控制系统的代表,已经成为了程序员必备的技能之一。在我们平时的开发过程中,我们通常将本地的代码提交到远程仓库中,以便将代码同步到其他计算机上。在这...
    99+
    2023-10-22
  • 如何用DevUI搭建自己的Angular组件库
    目录前言创建组件库关键配置修改目录布局调整库构建关键配置开发一个Alert组件组件功能介绍组件结构分解定义输入输出定义布局测试Alert组件开发态引用组件编写单元测试发布组件前言 作...
    99+
    2024-04-02
  • 如何搭建自己的云服务器呢苹果系统
    首先,我们需要了解一些基础的云服务器配置,包括云主机的选型、存储的选型、带宽的选型等等。在选型方面,需要根据自己的需求和实际情况来选择,同时也要考虑到所需的硬件资源和软件配置等方面。比如,如果我们需要搭建自己的服务器应用程序,那么就需要考虑...
    99+
    2023-10-28
    自己的 苹果 服务器
  • 使用dedecms搭建自己的本地网站(全程图解)
    大家好,对于我们初学而言,在多数情况下,网站都是在本地调试好后,才通过ftp上传到所买的空间或虚拟主机上。再绑定域名后网站才上线的。另外对于学习dedecms(织梦)模板开发或是仿站模板开发时,都要在本地调试好模板后才上...
    99+
    2022-06-12
    dedecms 搭建本地网站
  • 本地搭建minio文件服务器(使用bat脚本启动)的方法
    目录一、下载本地windows下的minio.exe二、新建一个文件夹用于存放minio.exe 同时新增一个data文件夹用于存放文件三、新建文本取名为minio.bat 然后编辑 (我这里在桌面新建的文件 可放于任何位置)四、访问五、修...
    99+
    2024-04-02
  • 自己汇总的redis使用详解
    循例介绍一下了,redis是内存数据库,是简单的key-value结构,也是nosql数据库,因为结构简单,而且用的是内存,所以速度非常之快.至于问有多快大家知道以前的机械硬盘,单盘速度其实也还好,而内存的...
    99+
    2024-04-02
  • 使用 Python一步步搭建自己的区块链
    你是否会和我一样,对加密数字货币底层的区块链技术非常感兴趣,特别想了解他们的运行机制。但是学习区块链技术并非一帆风顺,我看多了大量的视频教程还有各种课程,最终的感觉就是真正可用的实战课程太少。我喜欢在实践中学习,尤其喜欢一代码为基础去了解整...
    99+
    2022-06-09
    区块链
  • 使用Python一步步搭建自己的区块链
    你是否会和我一样,对加密数字货币底层的区块链技术非常感兴趣,特别想了解他们的运行机制。但是学习区块链技术并非一帆风顺,我看多了大量的视频教程还有各种课程,最终的感觉就是真正可用的实战课程太少。我喜欢在实践中学习,尤其喜欢一代码为基础去了解整...
    99+
    2022-11-24
    区块链
  • 如何搭建一套自己的蜜罐系统来收集恶意软件样本
    引言本文将介绍如何搭建自己的蜜罐(dionaea)。我想说的是,我们大多数人都喜欢逆向工程二进制文件。同时,我们中的许多人都对恶意软件很着迷。那么,为什么不把它们和一些正在被开发利用的恶意软件结合起来呢?我所要讲的是如何在Amazon We...
    99+
    2023-06-04
  • 如何搭建自己的云服务器呢苹果系统版本
    一、选择合适的操作系统和软件 首先,选择适合自己的操作系统和软件非常重要。不同的操作系统和软件适用于不同的场景和需求。例如,对于一些小型企业和个人用户,可以选择一些轻量级的Linux操作系统和Solaris操作系统,而对于大型企业和机构,...
    99+
    2023-10-27
    自己的 苹果 版本
  • Win10系统搭建ftp文件服务器详细教程
    Win10详细教程,供大家参考,具体内容如下 这几天想在软件上添加版本更新的功能,基于目前软件只是在公司内部使用,就搭了个ftp服务器在局域网内使用。ftp服务器可以在局域网内快速传...
    99+
    2022-11-13
    Win10搭建ftp文件服务器 Win10搭建ftp Win10搭建服务器
  • 使用vue3搭建后台系统的详细步骤
    目录一、配置vite二、router路由1、安装router路由2、配置router路由3、注册router路由4、使用router路由三、安装element plus等其他依赖1、...
    99+
    2024-04-02
  • 如何解析MyBatis信用盘系统搭建配置文件
    如何解析MyBatis信用盘系统搭建配置文件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。<xml version="1.0" enc...
    99+
    2023-06-04
  • 一文详解如何创建自己的Python装饰器
    目录1、@staticmethod2、自定义装饰器3、带参数的装饰器python装饰器在平常的python编程中用到的还是很多的,在本篇文章中我们先来介绍一下python中最常使用的...
    99+
    2024-04-02
  • 怎么用NAS搭建属于自己的邮件服务器
    这篇文章给大家介绍怎么用NAS搭建属于自己的邮件服务器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。安装邮件服务器,你可以将TNAS 架设成您自己的邮件服务器。邮件服务器是管理邮件数据库和邮件账户的工具。如何搭建邮件服...
    99+
    2023-06-04
  • gitee如何搭建自己的博客并使用自定义域名
    Gitee是一款优秀的码云平台,它可以为用户提供代码托管、项目管理、团队协作等多种有用的功能。但是,有些人不知道,Gitee还可以用来搭建自己的博客,并且还可以使用自定义域名,接下来,本文就将为大家详细介绍如何使用Gitee搭建自己的博客并...
    99+
    2023-10-22
  • Java+Springboot怎么搭建在线网盘文件分享系统
    这篇文章主要介绍“Java+Springboot怎么搭建在线网盘文件分享系统”,在日常操作中,相信很多人在Java+Springboot怎么搭建在线网盘文件分享系统问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作