首页 > 其他分享 >文件minio进阶 分页查询

文件minio进阶 分页查询

时间:2023-06-12 16:36:20浏览次数:37  
标签:map 进阶 分页 文件 list minioConfig String minio



文章目录

  • 前言
  • 一、minio使用
  • 二、代码
  • 1.mino版本是最新的,那么pom中也要最新的
  • 2. 部分代码
  • 总结



前言

就是现在通过minio管理文件,然后不需要其他信息,所以我也就没有用传统方式,在mysql中做文件记录,直接用minio做了文件存储,以及文件查询;


一、minio使用

1 docker 安装最新版minio.开通9000端口,默认用户名密码: minioAdmin/minioAdmin

2 创建存储桶,选择存储桶,edit policy >>> add,会多一行,没错,就是他

文件minio进阶 分页查询_文件路径


这个的作用是: 减少文件路径长度,长期有效,这样文件的路径变为: ip:9000/通名称/文件名称

3 根据创建好的桶.配置到项目中,获取accessKey secretKey 一般这两个与 minio 的用户名密码不一致

二、代码

1.mino版本是最新的,那么pom中也要最新的

minio 8.2.1

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

具体配置这里不一一列举了;

2. 部分代码

上传

public Map<String, String> upload(MultipartFile file) throws Exception {
        Map<String, String> map = new HashMap<>();
        String fileName = file.getOriginalFilename();
        PutObjectArgs args = PutObjectArgs.builder().bucket(minioConfig.getBucketName()).object(fileName).stream(file.getInputStream(), file.getSize(), -1).contentType(file.getContentType()).build();
        minioClient.putObject(args);
        String url = minioConfig.getFilePrefix() + fileName;
        log.info("上传文件的路径:{}", url);
        map.put(fileName, url);
        return map;
    }

分页查询,包括文件文件名称过滤

public PageInfo<Map<String, String>> page(FilePageDto filePageDto) throws Exception {

        List<Map<String, String>> list = CollectionUtil.newArrayList();
        if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(minioConfig.getBucketName()).build())) {
            ExceptionUtil.wrapRuntime("请先创建文件桶" + minioConfig.getBucketName());
        }
        Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).build());
        Map<String, String> map;
        for (Result<Item> result : results) {
            map = new HashMap<>();
            String originalFilename = result.get().objectName();
            // 条件为空,不过滤,直接返回
            if (StrUtil.isBlank(filePageDto.getFileName())) {
                map.put(originalFilename, minioConfig.getFilePrefix() + originalFilename);
                list.add(map);
            } else {//需要过滤
                for (String fileName : filePageDto.getFileNameList()) {
                    if (ObjectUtil.equals(originalFilename, fileName)) {
                        map.put(originalFilename, minioConfig.getFilePrefix() + originalFilename);
                        list.add(map);
                    }
                }
            }
        }

        return NebulaUtil.startPage(list, filePageDto.getPageNum(), filePageDto.getPageSize());
    }

分页具体代码

public static <T> PageInfo<T> startPage(List<T> list, Integer pageNum, Integer pageSize) {
        //创建Page类
        Page page = new Page(pageNum, pageSize);
        //为Page类中的total属性赋值
        page.setTotal(list.size());
        //计算当前需要显示的数据下标起始值
        int startIndex = (pageNum - 1) * pageSize;
        int endIndex = Math.min(startIndex + pageSize, list.size());
        //从链表中截取需要显示的子链表,并加入到Page
        page.addAll(list.subList(startIndex, endIndex));
        //以Page创建PageInfo
        PageInfo pageInfo = new PageInfo<>(page);
        return pageInfo;
    }

删除等其他

@DeleteMapping(value = "/delete")
    @ApiOperation("根据文件真实名称删除文件")
    public R delete(String filetName) throws Exception {
        // 删除文件夹下的对应文件
        minioClient.removeObject(RemoveObjectArgs.builder().bucket(minioConfig.getBucketName()).object(filetName).build());
        return R.success("删除成功");
    }


    @GetMapping(value = "/getUrl")
    @ApiOperation("根据文件真实名称获取文件路径")
    public R getUrl(String filetName) throws Exception {
        String url = minioConfig.getFilePrefix() + filetName;
        return R.data(url);
    }

总结

高版本的minio中文件操作等很多代码,都与低版本的minio不一样,这里面偏向入参为一个 对象,然后这个对象利用builder 构造,点进去也有详细的说明;
整体来说用着还是挺爽的,简单易用免费

重点: 千万不要小看这一步

创建存储桶,选择存储桶,edit policy >>> add,会多一行,没错,就是他

不操作的话,文件的路径会非常长,而且文件路径也需要从minio中重新查询出来,并且路径是有过期时间的


标签:map,进阶,分页,文件,list,minioConfig,String,minio
From: https://blog.51cto.com/u_16158506/6463438

相关文章

  • minio查询桶中文件,桶目录中文件
    文章目录前言一、文件桶中的文件夹是什么?二、文件查询1.桶中文件查询2.桶中文件夹中的文件查询总结前言文章再续,书接上文minio进阶分页查询说到了文件,可以实现分页查询,然后上次查询的是桶中的文件列表,这次遇到了需要数据隔离的文件,也就是需要在桶中再次建立文件夹;然后查......
  • Redis实现分页和多条件模糊查询方案
    简介: 本文将基于Redis提供条件查询+分页的技术解决方案。 导言Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如......
  • 对象存储服务-Minio
    对象存储服务(ObjectStorageService,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。对象存储服务在项目开发过程中,我们会产生大量的对象数据,包括:日志文件,数据库脚本文件、安装包,容器镜像,图......
  • 如何使用redis实现高效的分页功能
    如何使用redis实现高效的分页功能一、分页的需求和挑战在很多场景下,我们需要对大量的数据进行分页展示,比如社交网络中的动态、电商平台中的商品列表、博客网站中的文章评论等。分页的目的是为了提高用户体验,让用户可以按照自己的喜好和需求来浏览数据,而不是一次性加载所有的数据......
  • 14-7 shell脚本进阶数组
    一、数组的基本用法关联数组需要先声明[root@centos8~]#declare-adeclare-aBASH_ARGC=()declare-aBASH_ARGV=()declare-aBASH_COMPLETION_VERSINFO=([0]="2"[1]="7")declare-aBASH_LINENO=()declare-aBASH_SOURCE=()declare-arBASH_VERSINFO=([0]=&......
  • 职场3大进阶能力,让你更快达成人生目标
    一、时间管理1.时间成本:花时间做,还是花钱买 2.GTD:用大脑来思考,而不是记事  3.猴子理论:每个人都应该承担自己的责任  4.三八理论:人生的不同由第三个8小时创造 5.番茄工作法:人真的可以三头六臂吗  二、职业素养微信礼仪:让跟你打交道的人觉得舒服 邮件礼仪:一封好的邮......
  • TYPESCRIPT进阶--命名空间
    以下都是我的ChartGpt老师教学的内容哦,(若想知道怎么用ChartGpt学习,或者想知道我的问答方式,可以点这个查看我的学习记录)一:理解命名空间的概念和作用命名空间是一种组织代码结构的方式,它将相关的代码放在一个命名空间内,避免命名冲突和代码重复。在TypeScript中,命名空间是通过关键......
  • TypeScript进阶--命名空间(跟着ChartGpt学习)
    以下都是我的ChartGpt老师教学的内容哦,(若想知道怎么用ChartGpt学习,或者想知道我的问答方式,可以点这个查看我的学习记录)一:理解命名空间的概念和作用命名空间是一种组织代码结构的方式,它将相关的代码放在一个命名空间内,避免命名冲突和代码重复。在TypeScript中,命名空间是通过关键......
  • TypeScript进阶--模块化(跟着ChartGpt学习)
    以下都是我的ChartGpt老师教学的内容哦,(若想知道怎么用ChartGpt学习,或者想知道我的问答方式,可以点这个查看我的学习记录)一:模块化的概念和优点在JavaScript中,我们通常使用全局变量和函数来组织我们的代码,这样容易导致命名冲突、代码复杂、可维护性差等问题。而模块化则是一种更好......
  • 对象存储服务-Minio
    Mino目录Mino对象存储服务Minio参考Minio架构为什么要用Minio存储机制纠删码MinIO概念部署单机部署:Docker部署Minio分布式MinioMinio配置如何存储和访问对象MinIOClient(mc)命令使用通过代码存储对象对象存储服务(ObjectStorageService,OSS)是一种海量、安全、低成......