别再让 MinIO 暴露公网!Spring Boot + kkFile 文件流预览 + Token 鉴权

在Minio以STS方式获得临时凭据上传文件 一、写在前面 一个常见的场景是:需要让客户端来上传图片,面临的安全性问题。给与客户端永久凭据无疑是很大风险的,我们还可以选择“给予一个临时凭据,这个凭据关联到一个 授权的用户,我们可以随时停用和修改这个用户具有的权限” Minio提供了STS 的方式来实现这个方法。 MinIO安全令牌服务(STS)API允许应用程序生成用于访问MinIO部署的临时凭据。参考https://min.io/docs... 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

👉这是一个或许对你有用的开源项目

国产Star破10w的开源项目,前端包括管理后台、微信小程序,后端支持单体、微服务架构

RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能:

  • 多模块:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • 微服务:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK17/21+SpringBoot3、JDK8/11+Spring Boot2双版本 


一个被问烂的需求:MinIO 文件预览

「Word / Excel / PDF 在线预览,能搞吗?」——这是后台管理系统的高频需求。

国内 Java 项目的标准答案:MinIO 存文件 + kkFileView 转 PDF/HTML 在浏览器里预览 。

教程一搜一大把,但 90% 的教程少了关键一步——安全 。我看过的最常见方案是:

http://kkfile-server/onlinePreview?url=base64(http://minio-server/bucket/foo.docx)

这个 URL 直接把 MinIO 公网地址 + 文件路径 写在 base64 里——任何人拿到这个链接,用 base64 解码就能直接拿到 MinIO 的下载地址 ,绕过你的所有鉴权。

更糟的是,国内 OSS / MinIO 部署默认开 LIST 权限的不少,文件路径已知 + bucket 默认 LIST = 攻击者可以遍历你的所有文件 。每年都有几起「OSS 数据泄露」的安全事件,根因就这么简单。

这篇要讲的方案不是「能跑」,是「能跑 + MinIO 不暴露 + 文件流走业务 token 鉴权 」——这是生产里该有的姿势。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

默认接 kkFile 的方案到底什么问题

回顾一下「直传 MinIO 地址」的方案:

浏览器 → kkFile(onlinePreview?url=base64MinIO)
                ↓
         kkFile 解码 base64 拿到 MinIO 地址
                ↓
         kkFile 直接访问 MinIO 下载文件
                ↓
         转换成 PDF/HTML 给浏览器

问题清单 :

问题

后果

MinIO 公网地址暴露

浏览器 F12 看 Network 就能拿到

文件路径裸奔

知道一个文件路径 → 推测出更多文件路径(命名规则)

默认 LIST 权限

整个 bucket 文件列表泄露

没有用户级鉴权

任何人有 URL 就能看

跨用户访问

A 用户的文件链接 B 用户能直接打开

「文件预览」表面是个功能题,本质是个安全题 ——文件存在哪、谁能看、什么时候能看,三件事都要由后端控制。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

完整方案:文件流预览 + Token 鉴权

正确架构改成:

浏览器 → kkFile(onlinePreview?url=base64(后端文件流接口?token=xxx))
                ↓
         kkFile 解码 base64 拿到的是【后端接口地址】(不是 MinIO)
                ↓
         kkFile 用 token 调后端的 download 接口
                ↓
         后端校验 token,从 MinIO 拉文件流,返回给 kkFile
                ↓
         kkFile 转 PDF/HTML 返回浏览器

关键改动 :

  • kkFile 看到的不是 MinIO 地址,是后端的 /download/{token}/{filename} 接口 ;

  • 后端接口校验 token,校验通过才从 MinIO 拉文件流;

  • MinIO 永远不直接对外。

下面是关键代码。

文件上传

简单对接 MinIO SDK:

@Service
publicclass FileService {

    @Resource
    private MinioClient client;
    @Resource
    private MinioConfig minioConfig;

    public void uploadFile(MultipartFile file) throws Exception {
        String fileName = System.currentTimeMillis() + "-" + file.getOriginalFilename();
        client.putObject(PutObjectArgs.builder()
            .bucket(minioConfig.getBucketName())
            .object(fileName)
            .stream(file.getInputStream(), file.getSize(), -1)
            .contentType(file.getContentType())
            .build());
    }
}
@PostMapping("/upload")
public RestResult<Void> upload(MultipartFile file) {
    try {
        fileService.uploadFile(file);
        return RestResult.ok();
    } catch (Exception e) {
        log.error("上传文件失败", e);
        return RestResult.fail(e.getMessage());
    }
}
下载(核心:带 token 校验)

下载接口的 URL 设计是 /download/{token}/{filename} ——把 token 放在 path 里而不是 header,因为 kkFile 调过来时不会带 Authorization header :

@GetMapping("/download/{token}/{filename}")
public void download(@PathVariable String token,
                     @PathVariable String filename,
                     HttpServletResponse response) {
    // 鉴权 + 归属校验:token 必须是预览专用 token,且 claim 里的 fileId 跟 filename 对得上
    previewTokenService.validate(token, filename);
    fileService.streamToResponse(filename, response);
}

文件流从 MinIO 转写到 response:

public void streamToResponse(String filename, HttpServletResponse response) {
    try (InputStream input = client.getObject(GetObjectArgs.builder()
            .bucket(minioConfig.getBucketName())
            .object(filename)
            .build());
         OutputStream output = response.getOutputStream()) {

        response.setContentType("application/octet-stream;charset=UTF-8");
        response.setHeader("Content-Disposition",
            "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));

        // try-with-resources 自动关流;用 IOUtils 简化拷贝
        IOUtils.copy(input, output);
    } catch (Exception e) {
        log.error("文件下载失败 {}", filename, e);
        thrownew ServiceException("文件下载失败");
    }
}

改进点 :

  • try-with-resources 自动关流——原文手动 close 容易漏;

  • IOUtils.copy 替代手写 buffer 循环——少几行代码且更稳;

  • response 异常时自动回滚连接,不会泄露文件流。

预览地址生成(核心:签发短期 previewToken)

这一步是整个安全模型的关键:不要把登录主 token 拼到 URL 里 ——一旦泄漏(kkFile 日志、浏览器历史、CDN 缓存),整个用户态就漏了。正确做法是签发一个专用的、短期的、绑定 fileId 的 previewToken :

public String getPreviewUrl(String filename) throws Exception {
    // 1. 当前已登录用户(拦截器层把登录主 token 转成 userId)
    Long userId = SecurityContextHolder.getCurrentUserId();
    if (userId == null) {
        thrownew ServiceException("未登录");
    }

    // 2. 业务侧文件归属 / 共享权限校验(自己上传 or 共享给我)
    SysFile file = fileService.findByFilename(filename);
    if (file == null || !fileAuthService.canPreview(userId, file.getId())) {
        thrownew ServiceException("无权访问该文件");
    }

    // 3. 签发短期 previewToken(5 分钟有效,绑定 fileId / userId / scope)
    String previewToken = previewTokenService.issue(
        userId, file.getId(), Duration.ofMinutes(5));

    // 4. 拼成 kkFile 要调用的「后端 download 接口地址」
    String downloadUrl = fileDownloadUrl + "/" + previewToken + "/" + filename;

    // 5. base64 url-encode 后拼到 kkFile 预览接口
    String encoded = base64UrlEncode(downloadUrl);
    return filePreviewUrl + encoded
        + "&fullfilename=" + URLEncoder.encode(filename, "UTF-8");
}

public static String base64UrlEncode(String url) throws UnsupportedEncodingException {
    String b64 = Base64.getEncoder().encodeToString(url.getBytes(StandardCharsets.UTF_8));
    return URLEncoder.encode(b64, "UTF-8");
}
@GetMapping("/getPreviewUrl")
public RestResult<String> getPreviewUrl(String filename) throws Exception {
    return RestResult.ok(fileService.getPreviewUrl(filename));
}

返回的 URL 形如:

http://kkfile-server/onlinePreview?url=base64(http://api-server/file/download/{previewToken}/{filename})&fullfilename=xxx.docx

kkFile 解码 base64 拿到的是「带短期 previewToken 的 download 地址」——MinIO 的真实地址永远不会出现在浏览器里,登录主 token 也永远不会被拼到 URL 里 。

Token 校验的关键点

这个方案能跑通的核心是 /download/{token}/{filename} 这个接口要在拦截器里放行 ——否则 kkFile 没有 Authorization header,会被你的 Spring Security / 拦截器卡掉。

拦截器配置
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor)
            .addPathPatterns("/**")
            .excludePathPatterns(
                "/file/download/**",   // ← 关键:放行 download 接口
                "/login",
                "/swagger-ui/**"
            );
    }
}
PreviewTokenService:签发 + 校验

预览 token 跟登录主 token 用不同的 key、不同的 scope、独立短期 ——这样登录 token 不会被当成预览 token 滥用,预览 token 也不会有登录 token 那么长的有效期:

@Service
publicclass PreviewTokenService {

    privatefinal SecretKey signingKey;          // 跟登录 token 不同的密钥
    privatefinal SysFileService fileService;

    /** 签发:绑 fileId + userId + scope,过期时间通常 5-15 分钟 */
    public String issue(Long userId, Long fileId, Duration ttl) {
        return Jwts.builder()
            .claim("uid", userId)
            .claim("fid", fileId)
            .claim("scope", "preview")
            .setIssuedAt(new Date())
            .setExpiration(Date.from(Instant.now().plus(ttl)))
            .signWith(signingKey, SignatureAlgorithm.HS256)
            .compact();
    }

    /** 校验:token 必须是 preview scope,且 claim 里的 fileId 跟 path 上的 filename 对应 */
    public void validate(String token, String filename) {
        Claims claims;
        try {
            claims = Jwts.parserBuilder()
                .setSigningKey(signingKey)
                .build()
                .parseClaimsJws(token)
                .getBody();
        } catch (JwtException e) {
            thrownew ServiceException("预览 token 无效或已过期");
        }

        // 1. scope 必须是 preview——防登录 token 被误塞进来用
        if (!"preview".equals(claims.get("scope", String.class))) {
            thrownew ServiceException("token scope 不匹配");
        }

        // 2. 文件归属校验:claim 的 fid 必须跟 path 上的 filename 对得上
        Long claimFileId = claims.get("fid", Long.class);
        SysFile file = fileService.findByFilename(filename);
        if (file == null || !file.getId().equals(claimFileId)) {
            thrownew ServiceException("token 与文件不匹配");
        }
    }
}

这套设计兜住三件事 :

  • 登录 token 永远不进 URL ——URL 里只有短期 previewToken,泄漏了影响也限定在 5 分钟 + 这一个文件;

  • scope 隔离 ——签发用 scope=preview,登录主 token 拿过来直接被拒;

  • fileId 绑死 filename ——签发时 file 是 A,下载时 path 上是 B,直接拒;这是"任何登录用户能看任何文件"漏洞的兜底。

Path 参数顺序

/download/{token}/{filename} 里 filename 必须放最后 ——文件名可能含 .docx.pdf,Spring 的路径变量解析对带点号的参数有特殊处理,放最后才能正确捕获完整文件名(包含扩展名)。

整套方案上线后怎么验证安全模型生效?打开 F12 看 Network ——三件事你应该看到:

  • 浏览器地址栏只剩 http://kkfile-server/onlinePreview?url=<base64>&fullfilename=xxx.docx,MinIO 的真实地址完全不出现 ;

  • Network 里只有两个域名的请求:kkFile (拉转换后的 PDF/HTML) + 业务后端 download 接口 (被 kkFile 内部调用);

  • 把那段 base64 解出来,拿到的是 https://api/download/<previewToken>/xxx.docx——没有登录主 token、没有 MinIO 路径 。

这三条任意一条不成立,说明前面某一步漏了——多半是 getPreviewUrl 直接拼了 MinIO 地址,或者 previewToken 用了登录主 token 替代。

真正会让你掉头发的几件事

按踩到概率从高到低排:

坑一:MinIO 一定要关 LIST 权限(最常见,安全底线)

哪怕方案做得再严,如果 MinIO 的 bucket 默认 LIST 权限是开的,攻击者直接连 MinIO 公网就能列出所有文件 ——你前面所有 token 校验都白做。国内 OSS 数据泄露事件每年都有,根因往往就是这条 。

做法:

  • MinIO bucket 设为 private (默认私有);

  • bucket 网络接入只对内网开放,公网入口关闭;

  • 用 nginx 反代隔离 MinIO,业务 token 校验做在反代之前。

坑二:ContentType 设错,kkFile 直接乱码(最常见)
response.setContentType("application/octet-stream;charset=UTF-8");

很多教程里图省事写 text/plain——kkFile 拿到错的 ContentType 会按文本解析,PDF / Excel 直接乱码 。新人接入第一周必踩。

做法:按文件后缀返回正确 MIME(application/pdf、application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 等),或统一 application/octet-stream 让 kkFile 自己按文件扩展名判断。

坑三:previewToken TTL 不好定(常见)

5 分钟太短——用户打开 100MB 的 PDF,看到第三页 token 过期;30 分钟太长——一旦 URL 泄漏,攻击窗口大。

做法:

  • 常规文档(Office / PDF) :5-15 分钟够用;

  • 大附件 / 视频流 :把 TTL 拉长到 1 小时,但要求 fileId 强绑(前面 PreviewTokenService 已经做了);

  • 前端兜底 :用户操作时检测预览页存活时长,接近过期重新调 /getPreviewUrl 拿新 URL,避免「看到一半被赶下来」。

坑四:kkFile 缓存可能泄露(少见但破坏力大)

kkFile 默认会把转换后的 PDF/HTML 缓存在自己的本地磁盘 ——有些版本的缓存路径是按 base64 后的 URL 算 hash 的,不同 token 的同一文件会被重复转换并各存一份 。严格场景下这是数据泄露隐患。

做法:

  • 评估磁盘容量,定期清理 kkFile 缓存;

  • 或者在 kkFile 配置里关闭缓存(cache.enabled=false),代价是每次都重新转换;

  • 严格场景下用 kkFile 的「内存缓存模式」,进程重启就清。

一句话收口

文件预览是个「看着简单」的功能——看似只要把文件给 kkFile 它就转成 PDF ,但暴露 MinIO 地址 = 公网遍历你的所有文件,业务 token 校验缺位 = 任何登录用户能看任何文件。

正确姿势就一条:MinIO 永远不直接对外,所有文件访问走业务后端的鉴权接口 ——kkFile 看到的是你的接口,不是 MinIO。

工程取舍很简单——多做一层文件流接口的成本 (几十行代码 + 一次拦截器配置)远比「OSS 文件泄露事件」的成本低 ——后者是一次大事故 + 法务接入 + 监管处罚 + 可能上头条。

文件预览的本质,是把「能看」和「该看」拆开 ——前者是 kkFile 的能力,后者是你后端的责任。


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
文件对象管理器(集成MinIO、阿里云OSS基本操作及临时token获取) 立即下载

相关推荐

minio-js:适用于Java的MinIO Client SDK

用于Amazon S3兼容云存储的MinIO JavaScript库 MinIO JavaScript客户端SDK提供了简单的API,可以访问任何与Amazon S3兼容的对象存储服务器。 本快速入门指南将向您展示如何安装客户端SDK并执行示例JavaScript程序。 有关API和示例的完整列表,请查看文档。 本文档假定您已经安装了一个有效的设置。 从NPM下载 npm install --save minio 从源下载 git clone https://github.com/minio/minio-js cd minio-js npm install npm install -g 与TypeScript一起使用 npm install --save-dev @types/minio 初始化MinIO客户端 您需要五个项目才能连接到MinIO对象存储服务器。 参量 描述 终点

MINIO服务器的临时认证Token(STS)

MINIO是类似阿里的OSS云存储服务器。它支持AWS S3服务器的一些接口。 1.搭建MINIO服务器 mkdir /usr/local/minio mkdir /usr/local/minio/etc mkdir /usr/local/minio/data cd /usr/local/minio # 等待下载完成 curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio chmod 750 minio # 改成自己的

lwq657359703的博客 1万+

西电2023秋季机器学习复习提纲

西电2023秋季机器学习复习提纲,希望对学弟学妹有帮助

weixin_62083045的博客 5626

minio部署与使用

一、部署minio容器 拉取镜像 docker pull minio/minio 编写启动容器脚本(/data/minio) sudo vim mino.sh docker run -d \ -p 80:9000 \ --name=minio \ --restart=on-failure:3 \ -e "MINIO_ACCESS_KEY=admin" \ -e "MINIO_SECRET_KEY=password" \ -v /etc/localtime:/etc/localtime

北国有鱼的博客 4703

04目标检测-Two-stage的目标检测算法

前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.youkuaiyun.com/qq_41946216/article/details/132800752。版权声明:本文为优快云博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。

qq_41946216的博客 3650

利用 Openocd 和 FT2232H 实现 ARMv8(Coretex-A53)高效调试方案

本文详细介绍了如何利用开源工具OpenOCD与高性能USB转接芯片FT2232H,构建一套针对ARMv8架构(如Cortex-A53)的高效、低成本调试方案。内容涵盖从环境搭建、驱动配置、核心调试架构解析到实战问题排查的全过程,帮助开发者实现对多核处理器的透明、可控调试,是嵌入式Linux及底层开发的实用指南。

weixin_29163581的博客 279

minio之临时凭证及分享链接的生成和使用(代码篇)

上一篇文章介绍了minio之对象存储的访问链路minio之对象存储常用访问链路介绍_神云瑟瑟的博客-优快云博客本篇主要主要介绍标准链路中的临时凭证的生成和使用,以及分享链接的生成主要的pom文件 二、临时凭证的生成,并使用 使用永久凭证构造AssumeRoleProvider对象,然后得到临时accesskey和secretkey。然后再构造StaticProvider对象最后生成minioclient。注意点:临时凭证的默认过期时间是1个小时,可以自定义设置,但是如果设置的值小于1小时,会被

shenyunsese的专栏 1万+

DSSAD自动驾驶行车记录系统体系结构和应用

通过对其感知、决策、控制等模块的详细研究,以及对商业化和消费市场发展趋势的分析,为该领域的研究和实践提供有价值的参考。通过克服技术、安全与隐私、法规与政策等方面的挑战,并紧跟人工智能、云端服务、用户体验等发展趋势,DSSAD系统将更好地适应自动驾驶行业的发展,提供更安全、智能、便捷的驾驶辅助服务。DSSAD体系结构通过数据收集模块、加密链接和数据存储模块和数据读取模块等关键模块的协同作用,构建了一个强大而灵活的自动驾驶数据记录系统,为未来智能出行提供了坚实的技术基础。

一只老虎的专栏 2207

minio单点登录与集成(免密)

minio单点登录集成方案,minio免密登录方案

zhangdehua678的博客 677

知识图谱实战:从零搭建一个企业级金融风控图谱(附完整代码)

本文提供了一份从零构建企业级金融风控知识图谱的实战指南。通过使用Neo4j图数据库和Python,手把手教你整合多源数据、设计数据模型,并利用Cypher查询与图算法挖掘隐藏的关联风险与欺诈网络,附有完整代码,助力金融科技从业者实现从数据孤岛到全局风险洞察的升级。

weixin_29095587的博客 347

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

m0_51579041的博客 1万+

Minio 基于 bearer_token 监控

minio 监控配置

2302_78308374的博客 504

科研绘图系列:基因突变瀑布图统计以及可视化

科研绘图系列:基因突变瀑布图统计以及可视化

专注生信领域 1650

minio实现https访问

通过万能的nginx转发大法实现minio的https访问。

acheding的博客 1176

【我的Android进阶之旅】解决android应用使用android:persistent属性带来的系统Launcher应用必须重启设备才生效的问题,大幅度提升开发效率

一、问题描述 我们在开发系统级别应用,比如Launcher桌面的时候,会发现有个问题:每次Launcher修改完代码,重新编译之后,安装到android设备上之后,必须重启才会生效。否则就是使用了之前的Launcher版本的内容。而每次重启设备得一分钟左右,太慢了,太影响效率了! 1.1 痛点 每次更新完代码,重新安装之后,必须重启设备才会生效。效率太TM低了! 二、分析问题 经过一轮代码排查,最终发现是因为src\main\AndroidManifest.xml文件中,定义application使用了an

字节卷动 1709

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringBoot + minio + kkfile 实现文件预览

前后端微服务商城项目,手把手教学!1、容器安装 kkfileviewer1.1 下载文件这里以 kkfile 4.4.0-beta 版本为例下载 kkfile 安装包及 Dockerfile:https://codeup.aliyun.com/6254dee9a923b68581caaf50/kkfileviewer.git1.2、构建镜像gitclonehttps://codeup.aliy...

MarkerHub的博客 217

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringBoot实战:MinIO API配置与工具类优雅封装

本文通过"依赖引入→配置优化→工具类封装→使用示例"的完整流程,实现了SpringBoot项目中MinIO API的优雅封装。核心思路是通过配置解耦与分层设计,降低代码耦合度,提升可维护性;同时注重敏感信息安全与资源管理,确保工具类在开发与生产环境中都能稳定运行。通过合理的扩展,该工具类可轻松适配不同场景的需求,为项目开发提供高效支持。

weixin_41544125的博客 1099

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SpringBoot集成Minio实现上传凭证、分片上传、秒传和断点续传

SpringBoot+Minio实现上传凭证、分片上传、秒传和断点续传的方案分享和实战代码展示

baidu_21035953的博客 1874

SpringCloud+Minio+Nginx实现分布式文件鉴权管理

简单记录下springcloud+minio+nginx实现分布式文件鉴权管理

qq_847601290的博客 3388

MinIO多租户和访问控制详解

多租户架构和细粒度访问控制是现代云存储系统的核心特性,MinIO通过其强大的身份和访问管理(IAM)系统,为用户提供了灵活、安全的多租户支持和访问控制机制。本文将深入探讨MinIO的多租户架构、用户管理、策略控制和最佳实践。MinIO多租户和访问控制多租户架构身份管理访问控制安全策略最佳实践租户隔离资源共享配额管理用户管理认证机制服务账户策略引擎权限模型角色管理安全策略审计日志合规性配置建议性能优化监控告警 1. 引言 在云计算和微服务架构日益普及的今天,存储系统必须支持多租户架构以满足不同组织和团队的需求

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1097

通过http请求minio获取 bucket 可用容量和已用容量(Java)

请求MinIO接口获取metrics进行分析,获取可用容量和已用容量。

weixin_44573077的博客 3524
上一篇: 2026 全新 Java 面试题汇总(最新出炉)
下一篇: SpringBoot 内置工具类, 这也太好用了!
公众号-芋道源码
博客等级 码龄10年 1624粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值