安装以及使用Minio分布式文件系统

简介

MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。

它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。

官网:https://min.io

中文:https://www.minio.org.cn/,http://docs.minio.org.cn/docs/

MinIO集群采用去中心化共享架构,每个结点是对等关系,通过Nginx可对MinIO进行负载均衡访问。

安装与运行

下载MinIO:访问MinIO的官方网站https://min.io/)并导航到下载页面。选择适用于您操作系统的MinIO二进制文件进行下载。

这里我下载的是windows版本的,然后执行:

minio.exe server F:\project\minIO\minio\minIoData

访问MinIO管理界面:在浏览器中访问 http://localhost:9000,看到MinIO的管理界面,账号密码是minioadmin,同时创建你想要储存的文件的bucket。

设置为public 

 要改变accesskey的话:

输入bucket的名称,点击“CreateBucket”,创建成功

整合

 在安装MinIO服务器后,可以使用Spring Boot来接收前端上传的图片,并将其保存到MinIO,然后获取图片的访问链接。以下是实例代码:

添加MinIO Java客户端依赖:在Spring Boot项目的构建文件(如pom.xml)中,添加以下依赖:

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

创建MinIO配置:在Spring Boot的配置文件中,添加MinIO服务器的端点和访问凭证配置:

minio:
  endpoint: http://localhost:9000
  accessKey: minioadmin
  secretKey: minioadmin
  bucket:
    bucket1: picture #对应桶的名字

创建文件上传接口:创建一个Spring Boot的Controller类,定义文件上传的接口:

import io.minio.MinioClient;
import io.minio.errors.MinioException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

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

@RestController
@RequestMapping("/api/files")
public class FileUploadController {

    @Value("${minio.endpoint}")
    private String minioEndpoint;

    @Value("${minio.accessKey}")
    private String minioAccessKey;

    @Value("${minio.secretKey}")
    private String minioSecretKey;


    @Value("${minio.bucket.bucket1}")
    private String bucket;

    @PostMapping("/upload")
    public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            // 创建MinIO客户端
            MinioClient minioClient = MinioClient.builder()
                    .endpoint(minioEndpoint)
                    .credentials(minioAccessKey, minioSecretKey)
                    .build();

            // 检查存储桶是否存在,如果不存在则创建
            String bucketName = bucket;
            boolean isExist = minioClient.bucketExists(bucketName);
            if (!isExist) {
                minioClient.makeBucket(bucketName);
            }

            // 上传文件到MinIO
            String objectName = file.getOriginalFilename();
            minioClient.uploadObject(bucketName, objectName, file.getInputStream(), file.getSize(), file.getContentType());

            // 获取文件的访问链接
            String fileUrl = minioClient.getObjectUrl(bucketName, objectName);

            return ResponseEntity.ok(fileUrl);
        } catch (MinioException | IOException | NoSuchAlgorithmException | InvalidKeyException e) {
            e.printStackTrace();
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
        }
    }
}

代码中,/api/files/upload 是文件上传接口的URL路径,它接收前端上传的文件,并将文件保存到MinIO服务器中。在接口的实现中,我们使用MinIO Java客户端来完成文件上传和获取文件访问链接的操作。

这样返回的fileUrl就可以直接访问到图片或者是视频等文件资源了:

访问到图片了 

猜你喜欢

转载自blog.csdn.net/m0_54409739/article/details/134888129