首页 > 编程语言 >关于Java使用MinIO文件服务器操作文件

关于Java使用MinIO文件服务器操作文件

时间:2024-09-17 16:13:54浏览次数:11  
标签:Minio 文件 Java String private file MinIO

Java使用Minio上传文件示例代码

1. Minio介绍

MinIO 是一个基于Apache License v3.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日

志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

官网地址:https://docs.min.io/

MinIO特点

1、高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GB/s的写速率

2、可扩容:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心

3、云原生:容器化、基于K8S的编排、多租户支持

4、Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。

5、可对接后端存储: 除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。

6、SDK支持: 基于Minio轻量的特点,它得到类似Java、Python或Go等语言 的sdk支持

7、有操作页面

8、功能简单: 这一设计原则让MinIO不容易出错、更快启动

9、支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据!

MinIO存储机制:

Minio使用纠删码erasure code和校验和checksum。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。纠删码是一种恢复丢失和损坏数据的数学算法

2. 使用示例-上传文件

首先定义一个配置类用于读取Minio中的相关配置, 并初始化一个MinioClient对象

@Configuration
//@ConfigurationProperties(prefix="minio") //读取节点
@Data
public class MinioConstantProperties {

    @Value("${minio.endpointUrl}")
    private String endpointUrl;
    @Value("${minio.accessKey}")
    private String accessKey;
    @Value("${minio.secreKey}")
    private String secreKey;
    @Value("${minio.bucketName}")
    private String bucketName;

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

自定义一个Controller用于接收前端上传文件的请求:

@Tag(name = "上传管理接口")
@RestController
@RequestMapping("api/fileUpload")
public class FileUploadApiController {

    @Autowired
    private FileUploadService fileUploadService ;

    @Operation(summary = "上传文件")
    @PostMapping("fileUpload")
    public Result<String> fileUpload(MultipartFile file) throws Exception {
        String url = fileUploadService.fileUpload(file);
        return Result.ok(url);
    }
}

编写相关的Service接口以及实现类,这里只给出Service层的实现类:

@Service
public class FileUploadServiceImpl implements FileUploadService {

    @Autowired
    private MinioConstantProperties minioConstantProperties;

    @Autowired
    private MinioClient minioClient;

    /**
     *
     * @description 文件上传
     * @param file 需要上传的文件
     * @return 文件在minio服务器中的地址
     *
     */
    @Override
    public String fileUpload(MultipartFile file) {

        try{
            // 判断桶是否存在
            if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioConstantProperties.getBucketName()).build())) {
                minioClient.makeBucket(MakeBucketArgs.builder().bucket(minioConstantProperties.getBucketName()).build());
            }

            // 生成文件名
            String fileName = UUID.randomUUID().toString().replace("-","")+ "."+FilenameUtils.getExtension(file.getOriginalFilename());

            // 上传文件到MinIO并返回文件在MinIO服务器中的地址
            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
                    .bucket(minioConstantProperties.getBucketName())	// 桶名
                    .object(fileName)									// 存储到MinIO的文件名
                    .stream(file.getInputStream(), file.getSize(), -1)	// 文件流
                    .contentType(file.getContentType())					// 文件类型
                    .build();
            minioClient.putObject(putObjectArgs);
            return minioConstantProperties.getEndpointUrl()+"/"+minioConstantProperties.getBucketName()+"/"+fileName;
        } catch (Exception e){
            throw new RuntimeException(e);
        }
    }
}

3. 使用示例-删除文件

标签:Minio,文件,Java,String,private,file,MinIO
From: https://www.cnblogs.com/lilyflower/p/18417254

相关文章

  • java计算机毕业设计美食视频网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化时代,随着互联网的飞速发展和人们生活节奏的加快,美食文化已不再局限于传统的餐桌交流,而是逐渐渗透到网络世界的每一个角落。美食视频网站作为......
  • java计算机毕业设计简单二手车网站(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:随着汽车消费市场的日益成熟与消费者观念的转变,二手车交易逐渐成为汽车市场的重要组成部分。然而,传统的二手车交易过程往往伴随着信息不对称、交易流......
  • java计算机毕业设计健身房管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着人们健康意识的日益增强,健身已成为现代生活中不可或缺的一部分。然而,传统健身房管理模式往往面临效率低下、信息滞后、顾客体验不佳等挑战。会员......
  • java计算机毕业设计家教服务网(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景:在当今社会,随着教育竞争的日益激烈,家长对孩子学习成长的关注达到了前所未有的高度。传统教育模式已难以满足所有学生的个性化需求,而家教服务作为一种......
  • Java线程
    Java线程线程相关概念程序程序通常指的是计算机程序,是一系列指示计算机执行任务的命令或语句。这些命令按照特定的顺序排列,以解决某个问题或执行特定的运算。程序是软件的重要组成部分,它告诉计算机如何操作。进程进程指的是一个正在执行的程序实例,它不仅包含程序的代码和数......
  • 基于Springboot的在线外卖系统。Javaee项目,springboot项目。
    演示视频:基于Springboot的在线外卖系统。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,......
  • Springboot+vue的便利店信息管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
    演示视频:Springboot+vue的便利店信息管理系统(有报告),Javaee项目,springbootvue前后端分离项目。项目介绍:本文设计了一个基于Springboot+vue的前后端分离的便利店信息管理系统,采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+MybatisPlus+Vue+Maven......
  • git(二)——忽略文件版本追踪+分支管理常用命令
    .gitgnore—忽略文件的版本追踪    1.什么是.gitgnore?     .gitignore 文件是一个由Git版本控制系统使用的配置文件,它告诉 Git哪些文件和目录应该被忽略,即不应该被加入到版本控制中。通常用于排除一些不必要的文件,比如编译生成的文件、日志文件、个......
  • 使用 Spring Boot 的yml配置文件读取方式
    在Java项目中读取YML(YAML)配置文件有多种方式,尤其在使用SpringFramework(包括SpringBoot)时,更是提供了丰富的支持。以下是几种常见的方式来读取YML配置文件:1.使用SpringBoot的自动配置SpringBoot提供了对YML文件的自动化支持,这也是最常用的方式。1.1使用@Value......
  • 十、耕耘Java(反射)
    十.耕耘Java(反射)1.概念:程序在运行过程中,1.对于给定的一个类(Class)对象。可以获取到这个类(Class)对象的所有的属性和方法2.对于给定的一个对象(newXXXClassName<?extendobject>),都能够动态类的调用它任意一个属性和方法的机制,就叫做Java的反射机制。反射的优缺点:优点:1......