MinIO学习整理

MinIO Quickstart Guide

一.基本概念介绍

1.1 MinIO是什么?

MinIO 是一个基于Apache License v2.0开源协议和Go语言编写的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。

特点:

MinIO的特点在于简单、轻量级、对开发者友好、AIP易于上手、易维护。

中国官网文档地址:http://docs.minio.org.cn/docs/

1.2 桶的理解

通俗理解为:类似于计算机里面的文件夹,但是又区分与文件夹的概念,因为文件夹里面可以创建文件夹,但是minio的概念里,创建的桶是唯一的,不允许在桶里面在创建新桶 .

注意文件夹的名称不能大写

什么是文件对象:
通俗理解为:类似于计算机里面的文件,但是在minio的概念里,所有的文件都统称为对象,所以后续的AIP操作都是针对文件对象进行操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YTcITVEe-1617865034490)(D:\dhcc\MinIO\MinIO文档\img\1615795030972.png)]

二.怎么部署

MinIO 部署的方式有很多种,这里分别介绍在Windows和Linux环境下的部署方式,更多的方式可以去查看官方文档。

Windows环境的部署

下载二进制文件

操作系统CPU架构地址
微软Windows系统64位http://dl.minio.org.cn/server/minio/release/windows-amd64/minio.exe
//在cmd中进入你放minio.exe的目录中 执行以下命令 其中D:\Photos是你本地的一个存放文件的目录,你本地测试上传的文件都会放在这里
minio.exe server D:\Photos

国内镜像 http://dl.minio.org.cn/

默认情况下,MinIO 使用端口9000来侦听传入的连接。如果你的平台默认阻止了该端口,则需要启用对该端口的访问。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2sxYL88w-1617865034495)(D:\dhcc\MinIO\MinIO文档\img\1614589538158.png)]

这样其实我们就已经启动成功了,我们可以通过 http://127.0.0.1:9000 来验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E2vF8Wbs-1617865034496)(D:\dhcc\MinIO\MinIO文档\img\1614590015500.png)]

如何创建桶:
点击右下角的“+”号,选择“create bucket” 输入桶名称,即可在minio中创建好一个桶。

如何上传文件对象:
在刚才创建好的桶“mybucker”中点击右下角“+”号,选择“upload file”选择要上传的文件,即可将文件上传到minio中。

修改账号密码的方法

通过配置文件修改

找到你存放minIO.exe 文件的文件夹,找到 .minio.sys\config 里面的config.json,直接修改后保存重启即可。

MinIO server在首次启动时会生成一个新的config.json

在这里插入图片描述

设置ip 和端口号 在启动命令 后面 加 --address 127.0.0.1:9090

客户端的使用

“关于客户端的具体详细使用,请查看官方文档,这里只做简单介绍。”

MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案 。

下载二进制文件

平台CPU架构URL
Microsoft Windows64-bit Intelhttp://dl.minio.org.cn/client/mc/release/windows-amd64/mc.exe
mc.exe --help

值得一提的是,当你执行这行命令后,它不会像MySQL一样,而是还是在这个层级目录中。

命令

ls       列出文件和文件夹。
mb       创建一个存储桶或一个文件夹。
cat      显示文件和对象内容。
pipe     将一个STDIN重定向到一个对象或者文件或者STDOUT。
share    生成用于共享的URL。
cp       拷贝文件和对象。
mirror   给存储桶和文件夹做镜像。
find     基于参数查找文件。
diff     对两个文件夹或者存储桶比较差异。
rm       删除文件和对象。
events   管理对象通知。
watch    监听文件和对象的事件。
policy   管理访问策略。
session  为cp命令管理保存的会话。
config   管理mc配置文件。
update   检查软件更新。
version  输出版本信息。
Linux环境的部署

下载二进制文件

操作系统CPU架构地址
GNU/Linux64-bit Intelhttp://dl.minio.org.cn/server/minio/release/linux-amd64/minio
#chmod +x的意思就是给执行权限
chmod +x minio
./minio server /data

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NANKtasn-1617865034501)(D:\dhcc\MinIO\MinIO文档\img\format,png)]

MinIO 在Java中的使用

最低需求

Java 1.8或更高版本:


使用maven
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>3.0.10</version>
</dependency>
基本API

http://docs.minio.org.cn/docs/master/java-client-api-reference

存储桶操作文件对象操作Presigned操作存储桶策略
makeBucket 创建桶getObject 以流的形式下载一个对象presignedGetObject 生成一个给HTTP GET请求用的presigned URL。浏览器/移动端的客户端可以用这个URL进行下载,即使其所在的存储桶是私有的。这个presigned URL可以设置一个失效时间,默认值是7天getBucketPolicy 获得指定对象前缀的存储桶策略
listBuckets 列出所有桶putObject 通过InputStream上传对象presignedPutObject 生成一个给HTTP PUT请求用的presigned URL。同上setBucketPolicy 给一个存储桶+对象前缀设置策略
bucketExists 检查存储桶是否存在copyObjectpresignedPostPolicy 允许给POST请求的presigned URL设置策略,比如接收对象上传的存储桶名称的策略,key名称前缀,过期策略。
removeBucket 删除一个存储桶statObject 获取对象的元数据
listObjects 列出某个存储桶中的所有对象removeObject 删除
listIncompleteUploads 列出存储桶中被部分上传的对象removeIncompleteUpload 删除一个未完整上传的对象

https://github.com/minio/minio-java-rest-example

MinIO官网提供的Java示例,创建属于你的照片API服务示例

详细的API示例文档,请查看官方文档。

上传、下载、删除文件示例

本示例程序连接到一个对象存储服务,创建一个存储桶并上传一个文件到该桶中。

你需要有存储服务的三个参数才能连接到该服务。

参数说明
Endpoint对象存储服务的URL
Access KeyAccess key就像用户ID,可以唯一标识你的账户。
Secret KeySecret key是你账户的密码。

在下面的例子的中,我们将使用一个运行在https://play.min.io的免费托管的MinIO服务。你可以随意使用此服务进行测试和开发。此示例中显示的访问凭据是公开的。

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

import org.xmlpull.v1.XmlPullParserException;

import io.minio.MinioClient;
import io.minio.errors.MinioException;
	
//上传文件
public class FileUploader {
  public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException {
    try {
      // 使用MinIO服务的URL,端口,Access key和Secret key创建一个MinioClient对象
      MinioClient minioClient = new MinioClient("https://play.min.io", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");

      // 检查存储桶是否已经存在
      boolean isExist = minioClient.bucketExists("asiatrip");
      if(isExist) {
        System.out.println("Bucket already exists.");
      } else {
        // 创建一个名为asiatrip的存储桶,用于存储照片的zip文件。
        minioClient.makeBucket("asiatrip");
      }

      // 使用putObject上传一个文件到存储桶中。
      minioClient.putObject("asiatrip","asiaphotos.zip", "/home/user/Photos/asiaphotos.zip");
      System.out.println("/home/user/Photos/asiaphotos.zip is successfully uploaded as asiaphotos.zip to `asiatrip` bucket.");
    } catch(MinioException e) {
      System.out.println("Error occurred: " + e);
    }
  }
}
/**
     * 下载文件
     *
     * @param fileUrl  文件绝对路径
     * @param response
     * @throws IOException
     */
    @GetMapping("downloadFile")
    public void downloadFile(String fileUrl, HttpServletResponse response) throws IOException {
        if (StringUtils.isBlank(fileUrl)) {
            response.setHeader("Content-type", "text/html;charset=UTF-8");
            String data = "文件下载失败";
            OutputStream ps = response.getOutputStream();
            ps.write(data.getBytes("UTF-8"));
            return;
        }
        try {
            // 拿到文件路径
            String url = fileUrl.split("9000/")[1];
            // 获取文件对象
            InputStream object = minioUtils.getObject(MinioConst.MINIO_BUCKET, url.substring(url.indexOf("/") + 1));
            byte buf[] = new byte[1024];
            int length = 0;
            response.reset();
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(url.substring(url.lastIndexOf("/") + 1), "UTF-8"));
            response.setContentType("application/octet-stream");
            response.setCharacterEncoding("UTF-8");
            OutputStream outputStream = response.getOutputStream();
            // 输出文件
            while ((length = object.read(buf)) > 0) {
                outputStream.write(buf, 0, length);
            }
            // 关闭输出流
            outputStream.close();
        } catch (Exception ex) {
            response.setHeader("Content-type", "text/html;charset=UTF-8");
            String data = "文件下载失败";
            OutputStream ps = response.getOutputStream();
            ps.write(data.getBytes("UTF-8"));
        }
    }
//文件删除
@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 "删除成功";
}
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值