首页 > 其他分享 >十分钟精通MinIO:minio的原理、部署、操作

十分钟精通MinIO:minio的原理、部署、操作

时间:2024-05-27 12:28:55浏览次数:22  
标签:文件 Minio filePath minio String 十分钟 链接 MinIO

一、认识MinIO

Minio是一个简单易用的云存储服务,就像是一个放在网络上的大文件柜。想象一下,你有一间放满了各种文件的房间,有时候你需要把这些文件分享给朋友或者在不同地方访问它们。Minio就是帮你做到这一点的工具,它让你可以轻松地把文件上传到互联网上,这样无论你在哪里,只要有网络,就能访问或分享这些文件。

现在,如果你想要从这个仓库里取出一张图片或一段视频,让网站的访客能看到或者下载,Minio和网站之间就需要配合完成几个步骤:

1. 上传文件:首先,你通过Minio提供的接口或者工具,把视频或图片上传到Minio的服务器上。上传时,你可以设置一些额外的信息,告诉Minio这些文件是可以被公开访问的。

2. 生成链接:当你要在网站上展示这些文件时,Minio能生成一个特殊的网址(我们叫做对象URL)。这个链接直接指向存储在Minio中的视频或图片。关键在于,这个链接可以设置一个有效期,过了时间就失效,保证安全性。

3. 前端显示:网站的前端代码(就是浏览器能看到的部分)会用这个链接去请求Minio服务器上的视频或图片。当浏览器收到这些文件时,如果它们是图片,就会直接显示在页面上;如果是视频,则会在页面上嵌入一个播放器让用户观看。

4. 下载功能:对于下载来说,其实也很简单。因为前端已经有了这个文件的直接链接,用户点击“下载”按钮时,浏览器就会使用这个链接开始下载文件到用户的电脑上,就像平时在网上下载东西一样。

二、部署MinIO

1.拉取最新的minio镜像

docker pull minio/minio

2.启动minio

docker run -p 9000:9000 -p 9090:9090 \

--name minio \

-d --restart=always \

-e "MINIO_ACCESS_KEY=minio" \

-e "MINIO_SECRET_KEY=minio123" \

-v /Users/zhouchenghuan/mydata/minio/data:/data \

minio/minio server \

/data --console-address ":9090" -address ":9000"

端口9000是api地址,9090是后台管理界面地址。

账号密码、映射文件地址根据自己情况设定。

3.测试

进入minio管理界面,看到这个页面就说明你成功啦~

http://localhost:9090

 

三、在springboot中集成minio

1.添加minio的依赖

<!--minio依赖-->
<dependency>
    <groupId>io.minio</groupId>
    <artifactId>minio</artifactId>
    <version>7.1.0</version>
</dependency>

2.创建minio客户端

public static String uploading(String filePath) throws Exception {
    //3.将图片上传至minio
    //3.1.创建minio链接客户端
    FileInputStream fileInputStream = null;
    fileInputStream =  new FileInputStream(filePath);
    MinioClient minioClient = MinioClient.builder().credentials("minio", "minio123")
            .endpoint("http://localhost:9000").build();
    //3.2上传
    String fileName = new File(filePath).getName();
    // 检查文件名是否有效
    if (fileName == null || fileName.isEmpty()) {
        throw new IOException("无效的文件名");
    }
    String objectName = fileName; // 使用原始文件名作为对象名
    PutObjectArgs putObjectArgs = PutObjectArgs.builder()
            .object(objectName)//文件名
            .contentType("text/html/png/jpg")//文件类型
            .bucket("image")//桶名词  与minio创建的名词一致
            .stream(fileInputStream, fileInputStream.available(), -1) //文件流
            .build();
    minioClient.putObject(putObjectArgs);

    //设置 Minio 存储桶(bucket)的访问策略(Policy)
    String bucketPolicy = "{"
            + "  \"Version\": \"2012-10-17\","
            + "  \"Statement\": ["
            + "    {"
            + "      \"Effect\": \"Allow\","
            + "      \"Principal\": \"*\","
            + "      \"Action\": [\"s3:GetObject\"],"
            + "      \"Resource\": [\"arn:aws:s3:::" + "image" + "/*\"]"
            + "    }"
            + "  ]"
            + "}";
    //设置为公开
    minioClient.setBucketPolicy("image",bucketPolicy);
    // 得到一个长期链接   返回给前端用于渲染
    String downloadUrl = minioClient.getObjectUrl("image", objectName);
    System.out.println("长期链接" + downloadUrl);

    //删除临时文件
    // 判断文件是否存在
    if(Files.exists(Paths.get(filePath))) {
        try {
            // 删除文件
            Files.delete(Paths.get(filePath));
            System.out.println("临时文件删除成功");
        } catch (IOException e) {
            // 异常处理
            e.printStackTrace();
        }
    } else {
        System.out.println("临时文件不存在");
    }

    return downloadUrl;
}

3.单元测试

选择本地的一个图片上传

@Test
void test() throws Exception {
    MinioUtility.uploading("/Users/zhouchenghuan/Downloads/hh.png");
}

咱们看到已经成功了,那么咱们就可以将这个地址返回给前端去渲染、下载。

标签:文件,Minio,filePath,minio,String,十分钟,链接,MinIO
From: https://blog.csdn.net/qq_33449977/article/details/139234844

相关文章

  • 【MinIO】SpringBoot引入MinIO依赖遇到的一些问题:okhttp、kotlib-stdlib
    参考官方文档SDK:https://docs.min.io/docs/java-client-quickstart-guide.htmlMinIOJavaSDKisSimpleStorageService(akaS3)clienttoperformbucketandobjectoperationstoanyAmazonS3compatibleobjectstorageservice.MinIO依赖jar包下载地址:CentralReposi......
  • SpringBoot整合minio服务(超详细)
    一、使用docker部署minio1、拉取镜像dockerpullminio/minio2、创建目录mkdir-p/home/minio/configmkdir-p/home/minio/data3、创建Minio容器并运行dockerrun-p9000:9000-p9090:9090\--net=host\--nameminio\-d--restart=always\-e"MINIO_A......
  • go minio 设置访问权限
    bucket权限桶默认可以有三种AccessPolicy策略:public、custom、private。public:不经过任何认证可以直接访问资源custom:自定义策略AccessRuleprivate:未经授权不能进行任何操作,所有AccessRules失效策略为custom{"Version":"2012-10-17","Statement":[......
  • 本地部署MinIO实现文件下载
    前置要求续接上一篇随笔:https://www.cnblogs.com/liuhao-blog/p/18204853 1.实现代码1importio.minio.MinioClient;2importio.minio.GetObjectArgs;3importjava.io.InputStream;4importjava.nio.file.Files;5importjava.nio.file.Paths;67publiccla......
  • Docker 部署MinIO
    1、启动容器dockerrun-p9000:9000\-p9090:9090\--name=minio\--privileged=true\--restart=always\-e"MINIO_ROOT_USER=minio"\-e"MINIO_ROOT_PASSWORD=kun_minio&quo......
  • MinIO入门教程
    是什么?MinIO是一种高性能、S3兼容的对象存储。它是为大规模AI/ML、数据湖和数据库工作负载。它是软件定义的并在任何云或本地基础设施上运行。MinIO具有双重许可根据开源GNUAGPLv3和商业企业许可证特点简单简单性是百亿亿次数据基础设施的基础——无论是技术上......
  • 十分钟搭建自己的私有NuGet服务器-BaGet
    三分钟搭建自己的私有NuGet服务器-BaGet   目录前言开始搭建BaGet上传程序包在vs中使用其他最后前言NuGet是用于微软.NET(包括.NETCore)开发平台的软件包管理器。NuGet能够令你在项目中添加、移除和更新引用的工作变得更加快捷方便。通常使用NuGet都是......
  • Springboot+React实现Minio文件分片上传、断点续传
    前言本文采用前后端结合,后端给前端每个分片的上传临时凭证,前端请求临时url,通过后端间接的去上传分片。其实无关乎vue或者react,思路都是一样的,逻辑也全都是js写的,跟模板语法或者jsx也没关系,仅仅是赋值不一样而已。前端:React+TypeScript+Antd+axios+spark-md5+p-......
  • minio依赖报错
    引入minio-sdk后启动报错现象一1缺失kotlin.collections.ArraysKt.copyInto([B[BIII)[B解决方法提升kotlin-stdin依赖<dependency><groupId>org.jetbrains.kotlin</groupId><artifactId>kotlin-stdlib</artifactId><version>1.3.70</......
  • CentOs上安装minio
    MINIO安装一、下载二进制文件wgethttps://dl.minio.org.cn/server/minio/release/linux-amd64/minio 二、授权,并移动到指定目录chmod+xminiosudomvminio/usr/local/bin/ 二、创建服务文件/usr/lib/systemd/system/minio.service 内容如下: [Unit]Descripti......