minio安装部署及使用

MinIO文件服务器,从安装到使用 mino安装以及封装上传下载工具类,提供上传接口,数据表设计,上传异常处理,minio配置 阅读详情
AI摘要

本文详细介绍了MinIO在Linux服务器上的安装部署流程,包括下载、目录创建、后台启动及端口配置;阐述了通过Web控制台创建存储桶并设置读写权限的操作;重点说明了Spring Boot项目中集成MinIO的完整步骤:引入依赖、YAML配置、实体类封装、MinioClient配置类、文件上传工具类及Controller接口实现,并补充了基于AES的文件路径加解密工具类以增强安全性。

一、服务器安装minio

1.进行下载

下载地址:

GNU/Linux

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

2.新建minio安装目录,执行如下命令

mkdir -p /home/minio/data

把二进制文件上传到安装目录后,执行:

chmod +x minio    //给予权限
export MINIO_ACCESS_KEY=minioadmin   //创建账号
export MINIO_SECRET_KEY=minioadmin   //创建密码
./minio server /home/minio/data        //启动

 后台启动,并打印日志

nohup ./minio server /home/minio/data > /home/minio/data/minio.log &

默认的端口为:9000

自定义端口方式:自定义启动端口号以及控制台端口号,不设置则控制台会自动配置其他端口号,非常不方便

nohup ./minio server  --address :9000 --console-address :9001 /home/minio/data > /home/minio/data/minio.log &

查看状态

ps -ef|grep minio

二、进行访问,并设置桶

1.访问

        地址:http://127.0.0.1:9000

 输入账号密码后:

进行创建桶,名字自取,创建完成后服务器home/minio/data下也会创建这个文件目录

 进行设置:

必须将规则设置成readwrite ,才可进行读取文件,否则只存或者只能读。

 

 三、springboot进行实现

1.引入依赖

<!-- minio 相关依赖 -->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>
<!-- alibaba的fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.51</version>
</dependency>
<!-- thymeleaf模板引擎 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

 2.在 application.yml 文件中加入 MinIO 服务器的相关信息

# minio 文件存储配置信息
minio:
  endpoint: http://127.0.0.1:9000
  accesskey: minioadmin
  secretKey: minioadmin

3.创建实体类

这一步,我们将配置文件中 minio 的配置信息通过注解的方式注入到 MinioProp 这个实体中,方便后面我们使用

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * minio 属性值
 */
@Data
@Component
@ConfigurationProperties(prefix = "minio")
public class MinioProp {
    /**
     * 连接url
     */
    private String endpoint;
    /**
     * 用户名
     */
    private String accesskey;
    /**
     * 密码
     */
    private String secretKey;
}

4、创建核心配置类

通过注入 MinIO 服务器的相关配置信息,得到 MinioClient 对象,我们上传文件依赖此对象

import io.minio.MinioClient;
import io.minio.errors.InvalidEndpointException;
import io.minio.errors.InvalidPortException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * minio 核心配置类
 */
@Configuration
@EnableConfigurationProperties(MinioProp.class)
public class MinioConfig {

    @Autowired
    private MinioProp minioProp;

    /**
     * 获取 MinioClient
     *
     * @return
     * @throws InvalidPortException
     * @throws InvalidEndpointException
     */
    @Bean
    public MinioClient minioClient() throws InvalidPortException, InvalidEndpointException {
        return new MinioClient(minioProp.getEndpoint(), minioProp.getAccesskey(), minioProp.getSecretKey());
    }
}

5、上传工具类

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.redis.RedisUtil;
import com.zyxx.email.utils.DateUtils;
import io.minio.MinioClient;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@Component
public class MinioUtils {

    @Autowired
    private MinioClient client;
    @Autowired
    private MinioProp minioProp;

    /**
     * 创建bucket
     *
     * @param bucketName bucket名称
     */
    @SneakyThrows
    public void createBucket(String bucketName) {
        if (!client.bucketExists(bucketName)) {
            client.makeBucket(bucketName);
        }
    }

    /**
     * 上传文件
     *
     * @param file       文件
     * @param bucketName 存储桶
     * @return
     */
    public JSONObject uploadFile(MultipartFile file, String bucketName) throws Exception {
        JSONObject res = new JSONObject();
        res.put("code", 0);
        // 判断上传文件是否为空
        if (null == file || 0 == file.getSize()) {
            res.put("msg", "上传文件不能为空");
            return res;
        }
        try {
	       	// 判断存储桶是否存在
	        createBucket(bucketName);
	        // 文件名
	        String originalFilename = file.getOriginalFilename();
	        // 新的文件名 = 存储桶名称_时间戳.后缀名
	        String fileName = bucketName + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf("."));
	        // 开始上传
	        client.putObject(bucketName, fileName, file.getInputStream(), file.getContentType());
	        res.put("code", 1);
	        res.put("msg", minioProp.getEndpoint() + "/" + bucketName + "/" + fileName);
	        return res;
		}  catch (Exception e) {
            log.error("上传文件失败:{}", e.getMessage());
        }
        res.put("msg", "上传失败");
        return res;
    }
}

6.controller接口

import com.alibaba.fastjson.JSONObject;
import com.zyxx.email.common.minio.MinioUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

@Controller
public class MinioController {

    @Autowired
    private MinioUtils minioUtils;


    /**
     * 上传
     *
     * @param file
     * @param request
     * @return
     */
    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam(name = "file", required = false) MultipartFile file, HttpServletRequest request) {
        JSONObject res = null;
        try {
            res = minioUtils.uploadFile(file, "product");
        } catch (Exception e) {
            e.printStackTrace();
            res.put("code", 0);
            res.put("msg", "上传失败");
        }
        return res.toJSONString();
    }
}

测试

通过网址进行访问:

PostMan进行测试上传;

 

删除文件:


    //文件删除
    @DeleteMapping
    public String delete(String name) {
        try {
            MinioClient minioClient = new MinioClient(ENDPOINT, ACCESSKEY, SECRETKEY);
            minioClient.removeObject(BUCKETNAME, name);
        } catch (Exception e) {
            return "删除失败"+e.getMessage();
        }
        return "删除成功";
    }

 适用于minio的文件内容文件路径加解密工具类(AES对称加密)

在使用minio的情况下,官方提供两种方案来做对象加密,分别是SSE-C、SSE-S3。但是在某些情况下我们受限于条件没法快速的通过以上方案实现加密,那么这个工具类可以帮助你,此加密过程经测试效率很不错,5MB的文件加密解密整个过程在800ms以内。 

import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
 
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
 
import io.minio.MinioClient;
 
public class EncryptionUtil {
    static final String originKeyStr = "0123456789Abc@@@"; // 必须16个字符
    private static SymmetricCrypto aes;
 
 
    // 加密并编码字符串
    public static String encryptURLEncodeStr(String str) {
        try {
            if (aes == null) {
                SecretKey aesKey = new SecretKeySpec(originKeyStr.getBytes(StandardCharsets.UTF_8), "AES");
                byte[] key = aesKey.getEncoded();
//构建
                aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
            }
 
//加密
            byte[] encrypt = aes.encrypt(str.getBytes(StandardCharsets.UTF_8));
            String s = Base64.getUrlEncoder().encodeToString(encrypt);
            return s;
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }
 
    // 解码并解密字符串
    public static String decryptURLDecodeStr(String encStr) {
        try {
            if (aes == null) {
                SecretKey aesKey = new SecretKeySpec(originKeyStr.getBytes(StandardCharsets.UTF_8), "AES");
                byte[] key = aesKey.getEncoded();
    //构建
                aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
            }
 
    //加密
                byte[] bytes = Base64.getUrlDecoder().decode(encStr);
                String s = aes.decryptStr(bytes);
                return s;
            }catch (Exception e){
                e.printStackTrace();
            }
        return "";
    }
 
 
// 加密并上传文件
    @SneakyThrows
    public static void encryptUpload(MinioClient minioClient, String bucketName, String objectName, InputStream inputStream) {
        if (aes == null) {
            SecretKey aesKey = new SecretKeySpec(originKeyStr.getBytes(StandardCharsets.UTF_8), "AES");
            byte[] key = aesKey.getEncoded();
//构建
            aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
        }
 
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes, 0, bytes.length);
//加密
        byte[] encrypt = aes.encrypt(bytes);
        ByteArrayInputStream bais = new ByteArrayInputStream(encrypt);
 
        PutObjectOptions putObjectOptions = new PutObjectOptions(bais.available(), bais.available()< 5*1024*1024 ? 5*1024*1024 :  bais.available()*8);
        minioClient.putObject(bucketName, objectName, bais, putObjectOptions);
    }
 
 
// 下载文件并解密
    @SneakyThrows
    public static byte[] decryptDownload(MinioClient minioClient, String bucketName, String objectName) {
        if (aes == null) {
            SecretKey aesKey = new SecretKeySpec(originKeyStr.getBytes(StandardCharsets.UTF_8), "AES");
            byte[] key = aesKey.getEncoded();
            aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
        }
 
        InputStream inputStream = minioClient.getObject(bucketName, objectName);
        byte[] decrypt = aes.decrypt(inputStream);
        return decrypt;
    }
 
}

Minio 安装部署详细步骤(Windows & Linux) minio 安装部署 服务器 运维 阅读详情

相关推荐

minIO的安装以及使用

minIO的安装及使用

八月林城的博客 1781

MinIO文件服务器的安装使用

MinIO文件服务的安装和springboot项目整合使用

cxdashuaibi的博客 1万+

【Minio】Linux环境下安装部署Minio Server

Minio是一款高性能的对象存储服务器,它兼容Amazon S3 API。它的设计目的是为了提供云存储服务的性能和可扩展性,同时还保持着本地存储的简单性和易用性。Minio可以再Linux、MacOS和Windows等操作系统上运行,它可以通过命令行界面或RESTful API进行管理。Minio的核心是对象存储,对象是一组二进制数据和元数据的组合。对象可以存储为文件,也可以存储为内存中的数据结构。对象可以存储在不同的存储介质中,如本地磁盘、网络文件系统、云存储等。

weixin_40618306的博客 5492

MinIO的安装与使用

MinIO 是一种对象存储解决方案,提供与亚马逊云科技 S3 兼容的 API,并支持所有核心 S3 功能。 MinIO 专为部署在任何地方而构建 - 公共云或私有云、裸机基础架构、编排环境和边缘基础架构。

milk_yan的博客 8644

在centos安装部署MinIO

MinIO的安装部署可以按照以下步骤进行,这些步骤涵盖了准备安装环境、下载MinIO安装包、安装MinIO、配置MinIO以及启动并验证MinIO服务。

u014519722的博客 1546

Linux单节点单硬盘部署MinIO:安装部署MinIO对象存储服务实战指南

MinIO 要求用于存储数据的驱动器必须是独立的、非系统分区,以确保数据的安全性和性能。如果数据目录位于系统根分区,MinIO 会拒绝使用它,并报错。因此我们需要一个新的磁盘来作为MinIO的数据目录挂载点。ext4 是 Linux 系统中广泛使用的一种文件系统,它具备高可靠性、高性能以及支持大文件和大分区等优点。这里使用的是CentOS7版本,使用的是默认下载器yum,如果是CentOS8版本,则使用dnf下载器。挂载/mnt/data到新分区,查看挂载情况。获取新分区/dev/sdb1的UUID。

摘星编程的博客 4689

minio安装部署及简单使用

minio安装部署及简单使用 文章目录minio安装部署及简单使用1 单机安装2 minio浏览器界面操作3 minio集群安装3.1 minio集群部署方式3.2 minio集群部署步骤3.3 注意事项 Minio遵循极简的设计理念,从安装部署到运行都体现出极简的理念。对象存储,以对象为操作单元。 1 单机安装 通过如下步骤即可单机安装和运行minio 从官网下载minio二进制文件: 下载地址 新建minio安装目录,执行如下命令: mkdir -p /home/minio/data

技术控的笔记 4万+

Linux下MinIO单节点安装部署

Linux下MinIO单节点安装部署

bjzhang75的博客 2030

MinIO在Linux环境下单机安装部署

MinIO 是一个基于 Go语言实现的高性能对象存储。它采用AGPL(GNU Affero General Public License) 开源协议并兼容 S3 协议。

欧阳啸天的专栏 9907

minio集群的安装与部署

minio集群的安装与部署

风中凌乱的专栏 1196

minIO服务 linux安装部署

1,下载 去官网下载安装包。不大,49M左右。网址:https://min.io/download#/linux 或者使用命令行下载 : wget https://dl.min.io/server/minio/release/linux-amd64/minio 2,运行 chmod +x minio #启动 ./minio server /usr/software/minio/data 或者 MINIO_ACCESS_KEY=myminioadmin MINIO_SECR...

爱吃橙子蜂蜜酱的熊 1574

Centos7 Minio 安装部署及简单使用

Centos7安装部署Minio,以及使用Java进行上传下载文件Minio安装环境安装部署Minio控制台登录下载、安装客户端Java操作Minio上传下载文件1、项目结构2、pom.xml文件3、application.yml文件4、Java代码5、参考文章 Minio 官网 https://min.io/ 下载 https://min.io/download#/linux 文档 https://docs.min.io/ 参考文章 https://blog.youkuaiyun.com/llwy1428/a

Hello_0O0的博客 1万+

【网络安全】Centos7安装杀毒软件----ClamAV

Clam AntiVirus是一个Linux系统上使用的反病毒软件包。主要应用于邮件服务器,采用多线程后台操作,可以自动升级病毒库。

你在看屏幕的同时,屏幕也在注视着你 8827

minio单机安装部署

systemctl daemon-reload && systemctl enable minio.service #重载&&开机启动。MINIO_OPTS="--address :9000" #开启9000端口。

yangfei91的博客 992

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 439

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6557

minio安装部署和minIO-Client的使用

minio安装部署和minIO-Client的使用

weixin_46071647的博客 3470

cadence capture CIS 之添加数据库

2021-08-20 cadence capture CIS 之添加数据库准备一、添加数据源 准备 1、数据库文件(*.mdb) 2、电脑上安装好 cadence 软件 一、添加数据源 打开“ ODBC数据源管理器” ( 路径:C:\Windows\SysWOW64\odbcad32.exe ) ...

weixin_42256550的博客 6047

Linux上部署和安装MinIO

Linux上部署和安装MinIO

乐于分享,共同成长 1828

XGBoost特征重要性为0的问题:深度解析与应对策略

在机器学习领域,XGBoost(Extreme Gradient Boosting)作为一款高效且强大的集成学习算法,已经被广泛应用于各类预测任务中。然而,在实际应用过程中,许多数据科学家和工程师们遇到了一个令人困惑的现象——某些特征的重要性值为0。这不仅影响了模型的解释性,还可能导致特征选择过程中的误判。本文将深入探讨这一问题,分析其背后的原因,并提供相应的解决方案。在深入探讨特征重要性为0的问题之前,我们首先需要了解XGBoost是如何计算特征重要性的。XGBoost提供了三种常见的特征重要性计算方法:

cda2024的博客 1704

一篇文章带你搞定数学建模中的线性回归模型(05年长江水质问题示例讲解含代码)

文章目录一、问题分析二、原理讲解三、MATLAB 实现线性回归模型 一、问题分析 根据你的预测分析,如果未来10年内每年都要求长江干流的Ⅳ类和Ⅴ类水的比例控制在20%以内,且没有劣Ⅴ类水,那么每年需要处理多少污水 为了达到题目中所要求的水质,可建立废水排放量与各类水百分比之间的二元线性回归模型,对未来十年的废水排放量进行预测,并确定其与各类水所占百分比之间的函数关系式。通过此关系式,可以计算在这种情况下长江所能承受的最大污水排放量,将这个排放量与预测的排放量进行比较,多出来的部分就是需要每年处理掉的。 二、

南淮北安的博客 2164

Minio 安装部署

Minio 安装部署 1.安装包 2.安装步骤 2.1 整体目录结构 Home |-- minio | |-- minio(运行文件) | |-- run.sh | |-- data | | |--bucketName 2.2 安装 进入 home 目录,创建 minio 文件夹。将 minio运行文件放入创建好的 minio 文件夹下,并对 minio 运行文件赋权限 cd /home/ mkdir minio cd minio/ # minio运行文件位置 chmod +x minio 在

qq_43429919的博客 3314

Unity零基础到进阶 ☀️| Unity中的 GC及优化 超级全面解析 ☆(ゝω・)v 建议收藏!

介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。 Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。 本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。 Unity内存管理机制简介 要想了解垃圾回收如何工作以及何时被

努力前行,总会成为自己心中的那道光 6万+

linux下minio安装部署

linux下安装部署minio

csdnjava1994的博客 986

SAP S/4HANA Cloud 管理员业务角色创建实战:基于 SAP_BR_ADMINISTRATOR 模板的一站式指南

摘要:SAP S/4HANA Cloud新系统初始登录时常见Fiori Launchpad无磁贴的问题,这是由于缺乏合适的业务角色分配。本文介绍了通过预交付的SAP_BR_ADMINISTRATOR模板创建管理员角色的完整流程,包括业务用户、业务角色和业务目录的核心概念解析。重点说明了直接使用模板的风险,并提供了从模板创建自定义管理员角色的详细步骤(4.1-4.3),以及权限限制设置的注意事项。文中还分享了一个实际项目案例,强调正确配置管理员角色对后续权限体系建设的关键作用。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 200

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

上一篇: FTP部署及使用
下一篇: java链接打印机打印文件
辣椒太少不适合吃
博客等级 码龄5年 2691粉丝 88原创
评论 22
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值