当前位置: 首页 > article >正文

MinIO的安装与使用

目录

1、安装MinIO

1.1 下载 MinIO 可执行文件

1.2 检查 MinIO 是否安装成功

1.3 设置数据存储目录

1.4 配置环境变量(可选)

1.5 编写启动的脚本

1.6 开放端口

1.7 访问

2、项目实战

2.1 引入依赖

2.2 配置yml文件

2.3 编写Minio配置类

2.4 编写Minio操作类

2.5 业务类

2.6 测试

1、安装MinIO

1.1 下载 MinIO 可执行文件

        首先,下载 MinIO 的最新版本。你可以从 MinIO 官网下载或者使用 wget 直接下载。以下是使用 wget 下载并安装的步骤。

# 下载 MinIO 的可执行文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio

# 为 MinIO 可执行文件添加执行权限
chmod +x minio

# 将 MinIO 移动到系统的可执行路径(例如 /usr/local/bin)
sudo mv minio /usr/local/bin/

1.2 检查 MinIO 是否安装成功

        通过以下命令验证 MinIO 是否安装成功:

minio --version

        如果安装成功,您会看到 MinIO 的版本信息。 

1.3 设置数据存储目录

        选择一个目录来存储 MinIO 的数据。例如,创建一个 /app/minio/data(这是我的目录,自行修改) 目录用于 MinIO 存储。

sudo mkdir /app/minio/data

1.4 配置环境变量(可选)

        可以通过设置环境变量来配置 MinIO 的 MINIO_ROOT_USERMINIO_ROOT_PASSWORD,这些凭证会用于访问 MinIO Web 控制台和 API。

export MINIO_ROOT_USER="***"
export MINIO_ROOT_PASSWORD="****"

1.5 编写启动的脚本

vim minio.sh
#!/bin/bash
#nohup启动服务 指定文件存放路径/app/minio/data 还有设置日志文件路径/app/minio/minio.log
nohup ./minio server --address :9000 --console-address :9001 /app/minio/data > /app/minio/minio.log 2>&1 &

注意:

1.--address指定了minio的api端口,--console-address指定了minio的可视化管理界面的端口!

2.如果1.4没有执行也可以把1.4的环境变量写在启动的脚本里面 !

3.指定了1.3里面创建的数据存储路径并生成日志文件!

# 赋权
chmod +x minio.sh
# 启动脚本
./minio.sh
#查看日志
cat /app/minio/minio.log

1.6 开放端口

systemctl start firewalld && firewall-cmd --permanent --add-port=9001/tcp && firewall-cmd --reload && firewall-cmd --query-port=9001/tcp
systemctl start firewalld && firewall-cmd --permanent --add-port=9000/tcp && firewall-cmd --reload && firewall-cmd --query-port=9000/tcp

 一定要开放9000和9001两个端口!

1.7 访问

http://ip:9001

如果1.3和1.4都没有配置环境变量,那么账号密码都为默认的minioadmin:minioadmin

2、项目实战

2.1 引入依赖

        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.5.4</version>
        </dependency>
        <!-- minio8.3以上版本需要手动引入okhttp-->
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.3</version>
        </dependency>

2.2 配置yml文件

####################################minio配置#################################
minio:
  #此处需注意,需要配置minio的api的端口,配置可视化管理界面的端口会导致接口不报错但是文件操作不了
  url: http://ip:9000
  access-key: *****
  secret-key: *****
  bucket-name: ****

2.3 编写Minio配置类

package com.example.config;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <p>
 * Minio配置类
 * </p>
 *
 * @custom.date 2025/1/22 14:19
 */
@Data
@Configuration
public class MinioConfig {

    /**
     * 访问地址
     */
    @Value("${minio.url}")
    private String endpoint;

    /**
     * accessKey类似于用户ID,用于唯一标识你的账户
     */
    @Value("${minio.access-key}")
    private String accessKey;

    /**
     * secretKey是你账户的密码
     */
    @Value("${minio.secret-key}")
    private String secretKey;

    /**
     * 默认存储桶
     */
    @Value("${minio.bucket-name}")
    private String bucketName;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }

}

2.4 编写Minio操作类

package com.example.config;

import io.minio.*;
import io.minio.errors.*;
import io.minio.http.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

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

@Component
@Configuration
public class MinioTemplate {

    public MinioTemplate() {}


    @Autowired
    private MinioConfig minioConfig;

    @Autowired
    private MinioClient minioClient;

    public void createBucket(String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        MinioClient minioClient = this.minioClient;
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
            minioClient.makeBucket(
                    MakeBucketArgs.builder()
                            .bucket(bucketName)
                            .build());
        }
    }

    /**
     * 获取文件外链
     * @param bucketName bucket 名称
     * @param objectName 文件名称
     * @return
     */
    public String getObjectURL(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        return this.minioClient.getPresignedObjectUrl(
                GetPresignedObjectUrlArgs.builder()
                        .method(Method.GET)
                        .bucket(bucketName)
                        .object(objectName)
                        .build());
    }

    /**
     * 获取文件
     * @param bucketName
     * @param objectName
     * @return
     */
    public InputStream getObject(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        return this.minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build());
    }

    /**
     * 上传文件
     * @param bucketName
     * @param objectName
     * @param stream
     */
    public void putObject(String bucketName, String objectName, InputStream stream) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        //createBucket(bucketName);
        this.minioClient.putObject(
                PutObjectArgs.builder()
                        .bucket(bucketName)
                        .object(objectName)
                        .stream(stream, stream.available(), -1)
                        .build());
    }

    /**
     * 删除文件
     * @param bucketName
     * @param objectName
     */
    public void removeObject(String bucketName, String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        this.minioClient.removeObject(RemoveObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .build());
    }

    /**
     * 下载文件
     * @param bucketName
     * @param objectName
     */
    public InputStream downloadFile(String bucketName,String objectName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        return this.minioClient.getObject(GetObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .build());
    }

}

2.5 业务类

package com.example.service;

import com.example.config.MinioTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.InputStream;

@Service
public class MinioStorageService {

    @Autowired
    private MinioTemplate minioTemplate;

    @Value("${minio.bucket-name}")
    private String bucketName;

    /**
     * 获取文件外链
     *
     * @param objectName 文件名称
     */
    public String getObjectURL(String objectName) {
        try {
            return minioTemplate.getObjectURL(bucketName, objectName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public String uploadFile(InputStream inputStream, String filePath) {
        String path = null;
        try {
            minioTemplate.putObject(bucketName, filePath, inputStream);
            path = filePath;
        } catch (Exception e) {

        }
        return path;
    }

    public InputStream downloadFile(String filePath) {
        InputStream inputStream = null;
        try {
            inputStream = minioTemplate.getObject(bucketName, filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return inputStream;
    }

    public void removeFile(String filePath){
        try{
            minioTemplate.removeObject(bucketName,filePath);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public void createBucket(String bucketName) {
        try {
            minioTemplate.createBucket(bucketName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2.6 测试

package com.example.controller;

import com.example.service.MinioStorageService;
import io.minio.errors.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

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

@RestController
public class MinioController {

    @Autowired
    private MinioStorageService minioStorageService;


    @RequestMapping("/createBucket")
    public void createBucket(@RequestParam("bucketName") String bucketName) throws ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
        minioStorageService.createBucket(bucketName);
    }

    @RequestMapping("/uploadFile")
    public void uploadFile(@RequestParam("file") MultipartFile file,@RequestParam("fileName") String fileName) throws IOException {
        minioStorageService.uploadFile(file.getInputStream(),fileName);
    }


}

上传成功后可以在控制台中看到这个文件 。


http://www.kler.cn/a/519406.html

相关文章:

  • Hook 函数
  • [极客大挑战 2019]BuyFlag1
  • 【2024年华为OD机试】(A卷,200分)- 查找树中元素 (JavaScriptJava PythonC/C++)
  • doris:MySQL Load
  • 联想电脑怎么设置u盘启动_联想电脑设置u盘启动方法(支持新旧机型)
  • kotlin 简介
  • Linux下的编译工具 —— gcc、g++
  • GPT-4对话模型在客服中的应用与前景:开启智能客服新时代
  • Angular 2 表单深度解析
  • 双目立体校正和Q矩阵
  • Excel 技巧20 - 在Excel中输入内容时自动添加边框(★★)
  • 水果实体店品牌数字化:RWA + 智能体落地方案
  • 《浅聊规矩》
  • 智慧水务管网在线监测平台(Axure高保真原型)
  • 【vue3组件】【大文件上传】【断点续传】支持文件分块上传,能够在上传过程中暂停、继续上传的组件
  • 模型合并:AI优化的创新利器
  • 0163__linux动态链接库导出函数控制
  • Dual Thrust日内策略分享:轻松捕捉趋势突破点
  • 【2024年华为OD机试】 (A卷,100分)- 整理扑克牌(JavaScriptJava PythonC/C++)
  • 杨辉三角形(118)
  • 从ABCD谈人工智能对软件开发的影响(2)
  • Linux(LAMP)
  • 修改maven的编码格式为utf-8
  • 政安晨的AI大模型训练实践三:熟悉一下LF训练模型的WebUI
  • 进化算法(一):遗传算法理论及引例
  • 游戏与硬件深度协同,打造更精细的体验优化