minio对象存储单机部署并设置开机自启动及集成spring boot进行(创建删除桶)(上传下载删除文件)

目录

1、minio简介

2、minio特性

3、下载及部署

 4、配置开机自启动

5、集成Springboot


1、minio简介

MinIO 是在GNU Affero 通用公共许可证 v3.0下发布的软件定义的高性能对象存储 。它与亚马逊的 S3 云存储服务 API 兼容。使用 MinIO 为机器学习、分析和应用程序数据工作负载构建高性能基础架构。

2、minio特性

本节选自官网介绍

高性能:
MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标。
可扩展性:
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标。
云的原生支持:
MinIO 是在过去4年的时间内从0开始打造的一款软件 ,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。 其中包括支持Kubernetes 、微服和多租户的的容器技术。使对象存储对于 Kubernetes更加友好。
与Amazon S3 兼容:
亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和。

3、下载及部署

安装包下载地址:地址1 地址2

上传到服务器指定位置并执行以下命令:

sudo chmod +x minio

./minio server /data/Minio/minio_data --console-address :9090 > /data/Minio/log/minio.log 2>&1 &

参数说明

./minio:/data/Minio文件夹下的minio应用
/data/Minio/minio_data:数据存储位置
–console-address 9090:指定固定端口(设置https访问时必须指定)
/data/Minio/log/minio.log:日志存储位置

输出以下信息说明运行成功。

 打开Web 浏览器输入minio部署:ip端口:9090,如本机则:127.0.0.1:9090

 4、配置开机自启动

1)创建编辑minio.sh脚本,存储在minio应用同级目录,如/data/Minio 文件夹下

cd /data/Minio
touch minio.sh
vim minio.sh

2)minio.sh脚本内容如下:

#!/bin/bash
./minio server /data/Minio/minio_data --console-address :9090 > /data/Minio/log/minio.log 2>&1 &

 3)赋予minio.sh可执行权限

sudo chmod +x minio.sh

4)编辑开机运行文件 /etc/rc.d/rc.local

vim /etc/rc.d/rc.local

5)添加以下脚本:

cd /data/Minio
./minio.sh minio

6)赋予rc.local可执行权限

sudo chmod +x /etc/rc.local 

7)重启服务器测试

reboot

8)重启之后,查看是否启动

ps -ef | grep minio

5、集成Springboot

pom.xml导入:

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

对monio进行创建桶,删除桶,上传文件,下载文件,删除文件

代码:

package andanyoung.redis.rediscluster.controller;

import io.minio.*;
import io.minio.errors.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * @author wly
 * @date 2022-05-23 8:45:27
 * @describe java minio 创建桶,删除桶及文件上传,下载及删除
 */
@Slf4j
@RestController
public class minioFileUploader {
    //创建桶
    @GetMapping("creatBucket")
    public String creatBucket(){
        log.info("开始创建桶!");
        String name="datatest";
        String result="创建桶成功,桶名称:"+name;
        try {
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint("https://play.min.io")//minio 服务器地址
                            .credentials("minioadmin","minioadmin")//minio 账号密码
                            .build();
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
            if (!found) {
                // Make a new bucket called 'datatest'.
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("datatest").build());
            } else {
                log.info("Bucket 'datatest' already exists.");
            }
            log.info(result);
            return result;
        }catch (Exception e){
            log.info("创建桶失败!");
            return "创建桶失败!";
        }
    }
    //删除桶
    @GetMapping("removeBucket")
    public String removeBucket() {
        log.info("开始删除桶!");
        String name="datatest";
        String result="删除桶成功,桶名称:"+name;
        try {
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint("https://play.min.io")//minio 部署服务器地址
                            .credentials("minioadmin","minioadmin")//minio 账号密码
                            .build();
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
            if (found) {
                // remove a bucket called 'datatest'.
                minioClient.removeBucket(RemoveBucketArgs.builder().bucket("datatest").build());
            } else {
                log.info("Bucket 'datatest' already exists.");
            }
            log.info(result);
            return result;
        }catch (Exception e){
            log.info("删除桶失败!");
            return "删除桶失败!";
        }
    }
    //文件上传
    @GetMapping("fileUploader")
    public String fileUploader(){
        String path="D://data/hello.txt";
        log.info("开始进行文件上传,文件名称:hello.txt");
        try {
            MinioClient minioClient =
                    MinioClient.builder()
                            .endpoint("https://play.min.io")//minio 部署服务器地址
                            .credentials("minioadmin","minioadmin")//minio 账号密码
                            .build();
            boolean found =
                    minioClient.bucketExists(BucketExistsArgs.builder().bucket("datatest").build());
            if (!found) {
                // Make a new bucket called 'datatest'.
                minioClient.makeBucket(MakeBucketArgs.builder().bucket("datatest").build());
            } else {
                log.info("Bucket 'datatest' already exists.");
            }
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket("datatest")  //minio 桶名称
                            .object("hello.txt") //minio服务器上的保存文件名称
                            .filename(path)  //本地文件路径
                            .build());
            log.info(path);
        }catch (Exception e){
            log.info("文件上传失败!");
        }
        return "文件上传成功,上传到桶位置是:datatest,上传成功文件是:"+path;
    }
    //下载文件
    @GetMapping("downloadFiles")
    public String downloadFiles() throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, ErrorResponseException {
        String path="D://data/";
        String bucketName = "datatest";
        log.info("开始进行文件下载,文件名称:hello.txt");
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint("https://play.min.io")//minio 部署服务器地址
                        .credentials("minioadmin","minioadmin")//minio 账号密码
                        .build();
        // 检查'datatest'是否存在。
        boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        if (found) {
            // 列出'my-bucketname'里的对象
            Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).build());
              //下载minio指定目录下的所有文件
//            for (Result<Item> result : myObjects) {
//                Item item = result.get();
//                log.info(item.lastModified() + ", " + item.size() + ", " + item.objectName());
//
//                minioClient.downloadObject(
//                        DownloadObjectArgs.builder()
//                                .bucket(bucketName)
//                                .object(item.objectName())
//                                .filename(path+item.objectName())
//                                .build());
//            }
            //下载minio指定目录下的某个文件
            minioClient.downloadObject(
                    DownloadObjectArgs.builder()
                            .bucket(bucketName)
                            .object("hello.txt")
                            .filename(path+"hello.txt")
                            .build());
            log.info("文件下载成功,文件保存路径是:"+path+",下载文件名称是:hello.txt");
        }
        return "文件下载成功,文件保存路径是:"+path+",下载文件名称是:hello.txt";
    }
    //删除指定文件
    @GetMapping("removeFiles")
    public String removeFiles(){
        String bucketName = "datatest";
        log.info("开始进行删除指定文件!");
        MinioClient minioClient =
                MinioClient.builder()
                        .endpoint("https://play.min.io")//minio 部署服务器地址
                        .credentials("minioadmin","minioadmin")//minio 账号密码
                        .build();
        // 检查'datatest'是否存在。
        try{
            boolean found = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
            if (found) {
                minioClient.removeObject(
                        RemoveObjectArgs.builder()
                                .bucket(bucketName)
                                .object("hello.txt")
                                .build());

            }
        }catch (Exception e){
            log.info("删除指定文件失败!");
        }
        return "文件删除成功,删除文件名称是:hello.txt";
    }
}

官网API接口文档

猜你喜欢

转载自blog.csdn.net/huanglm_OneWholeLife/article/details/124880622