springboot集成minIO

文件系统:负责管理和存储文件的系统软件。操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件

minIO:轻量级服务分布式文件系统,适合存储非机构化数据。采用去中心化共享架构,结点之间是对等关系。

 

端口号为9000,初次登录账号密码都是minioadmin

 

minIO中使用bucket的概念来分隔管理文件,当然我们也可以在设置object的时候通过2024/7/3/myPic.jpg在bucket中生成对应的文件夹方便文件管理

以下是通过minIO实现的文件管理

这里使用的是很经典的建造者模式,bucket代表你所选择的桶,object代表你要存放在当前桶的具体名称/具体位置,filename则是你要存放在文件在当前磁盘的具体位置。

复制代码
public class MinIOtest {
    MinioClient minioClient = MinioClient.builder()
            .endpoint("http://192.168.101.65:9000")
            .credentials("minioadmin", "minioadmin")
            .build();

    @Test
    public void upload() {
        try {
            minioClient.uploadObject(
                    UploadObjectArgs.builder()
                            .bucket("test")
                            .object("pic.jpg")
                            .filename("C:\\Users\\17900\\Pictures\\74721741_p0_master1200.jpg")
                            .build()
            );
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Test
    public void delete() {
        try {
            minioClient.removeObject(
                    RemoveObjectArgs.builder()
                            .bucket("test")
                            .object("pic.jpg")
                            .build());
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    @Test
    public void search() {
        try {
            FilterInputStream test = minioClient.getObject(
                    GetObjectArgs.builder()
                            .bucket("test")
                            .object("pic.jpg")
                            .build()
            );
            // 指定输出流输出
            FileOutputStream fileOutputStream = new FileOutputStream(new File("C:\\Users\\17900\\Pictures\\74721741_p0_master1200.jpg"));
            IOUtils.copy(test, fileOutputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
复制代码

 

当我们使用springboot接受一个MultipartFile文件时,苦于无法直接传递他的绝对路径以便于后面filename的使用。

我们通过File.createTempFile()来生成一个临时文件,再将上述MultipartFile文件通过transferTo将文件内容传给这个临时文件。这时我们可以把这个临时文件上传给远程minIO以供保存,

下述示例中,我们可以通过absolutePath将文件传递给fileName从而实现图片远程保存。

    @ApiOperation("上传文件接口")
    @RequestMapping(value = "/upload/coursefile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public UploadFileResultDto uploadCoursefile(@RequestPart("filedata")MultipartFile filedata) throws IOException {
        File tempFile=File.createTempFile("minio", "temp");
        filedata.transferTo(tempFile);
        String absolutePath = tempFile.getAbsolutePath();
        return mediaFileService.upload(filedata,absolutePath);
    }

 

 

24/7/5新增:通过minIO实现对分块文件的合并

复制代码
@Test
    void merge() {
        List<ComposeSource> composeSources = Stream.iterate(0, i -> ++i)
                .limit(5)
                .map(i -> ComposeSource.builder().bucket("test").object("chunk/" + i).build())
                .collect(Collectors.toList());
        try {
            minioClient.composeObject(ComposeObjectArgs.builder()
                    .bucket("test")
                    .object("merge.mp4")
                    .sources(composeSources)
                    .build());
        } catch (Exception e) {
        }
    }
复制代码

 

posted @   天启A  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示