MinIO Java 对接试用:从连接、上传到下载的完整示例
MinIO Java 对接试用从连接、上传到下载的完整示例适用场景Spring Boot 服务接入自建 MinIO用于文件上传、下载、预览和删除。本文示例不包含真实地址、账号或密钥生产环境请使用环境变量或密钥管理服务。一、先明确 MinIO 的对象模型MinIO 兼容 S3核心对象是Endpoint服务地址、Bucket桶、Object对象键和凭证。对象键不是本地文件路径例如2026/08/report.pdf只是一个字符串前缀。二、准备试用环境MinIO Endpoint: http://127.0.0.1:9000 控制台地址: http://127.0.0.1:9001 Bucket: demo-files Access Key: 通过环境变量注入 Secret Key: 通过环境变量注入首次试用建议创建独立测试桶和最小权限账号不要直接使用管理员账号连接业务系统。三、引入 Java SDK在 Maven 中加入依赖版本由项目统一管理不要在多个模块写不同版本。dependencygroupIdio.minio/groupIdartifactIdminio/artifactIdversion${minio.version}/version/dependency四、Spring Boot 配置minio:endpoint:${MINIO_ENDPOINT:http://127.0.0.1:9000}access-key:${MINIO_ACCESS_KEY:}secret-key:${MINIO_SECRET_KEY:}bucket:${MINIO_BUCKET:demo-files}不要把secret-key提交到 Git。开发机可以用 PowerShell 临时变量$env:MINIO_ENDPOINThttp://127.0.0.1:9000$env:MINIO_ACCESS_KEY测试账号$env:MINIO_SECRET_KEY测试密钥$env:MINIO_BUCKETdemo-files五、创建 MinioClient BeanConfigurationpublicclassMinioConfig{BeanMinioClientminioClient(Value(${minio.endpoint})Stringendpoint,Value(${minio.access-key})StringaccessKey,Value(${minio.secret-key})StringsecretKey){returnMinioClient.builder().endpoint(endpoint).credentials(accessKey,secretKey).build();}}六、封装常用操作ServicepublicclassObjectStorageService{privatefinalMinioClientclient;privatefinalStringbucket;publicObjectStorageService(MinioClientclient,Value(${minio.bucket})Stringbucket){this.clientclient;this.bucketbucket;}publicvoidensureBucket()throwsException{booleanexistsclient.bucketExists(BucketExistsArgs.builder().bucket(bucket).build());if(!exists){client.makeBucket(MakeBucketArgs.builder().bucket(bucket).build());}}publicvoidupload(StringobjectName,InputStreaminput,longsize,StringcontentType)throwsException{client.putObject(PutObjectArgs.builder().bucket(bucket).object(objectName).stream(input,size,-1).contentType(contentType).build());}publicInputStreamdownload(StringobjectName)throwsException{returnclient.getObject(GetObjectArgs.builder().bucket(bucket).object(objectName).build());}publicStringpresignedGetUrl(StringobjectName,intminutes)throwsException{returnclient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucket).object(objectName).expiry(minutes,TimeUnit.MINUTES).build());}publicvoiddelete(StringobjectName)throwsException{client.removeObject(RemoveObjectArgs.builder().bucket(bucket).object(objectName).build());}}InputStream用完必须关闭大文件不要先读入byte[]。size已知时传实际长度未知时传-1并设置合理的分片大小。七、提供一个联调接口RestControllerRequestMapping(/api/files)publicclassFileController{privatefinalObjectStorageServicestorage;PostMapping(consumesMediaType.MULTIPART_FORM_DATA_VALUE)publicMapString,Stringupload(RequestPartMultipartFilefile)throwsException{StringobjectNameUUID.randomUUID()-StringUtils.cleanPath(file.getOriginalFilename());storage.upload(objectName,file.getInputStream(),file.getSize(),Optional.ofNullable(file.getContentType()).orElse(MediaType.APPLICATION_OCTET_STREAM_VALUE));returnMap.of(objectName,objectName);}}测试curl-Ffile./demo.txthttp://localhost:8080/api/files八、试用验收清单启动服务后能自动创建测试桶或检测到已有桶。上传后在 MinIO Console 中能看到对象大小和 Content-Type 正确。下载内容与原文件校验和一致。预签名 URL 在有效期内可访问过期后失效。删除对象后再次下载返回不存在。错误日志不打印 Secret Key、完整预签名 URL 或用户隐私。九、生产化注意事项桶默认保持私有下载使用后端鉴权后生成短时预签名 URL。对象键使用业务 ID 加随机值避免用户原文件名造成覆盖和路径穿越。上传前校验扩展名、MIME、大小和病毒扫描结果。大文件使用分片上传失败时记录 uploadId 并提供清理策略。需要审计时保存对象键、业务单号、上传人、大小、哈希和时间不保存密钥。跨服务器迁移前先确认版本控制、对象锁、生命周期和元数据是否需要保留。本文示例适合首次验证 SDK 与 MinIO 连通性。真正上线前应补充统一异常、权限模型、断点续传、限流和监控。

相关新闻

基于AES-256的单文件绿色版文件夹加密器设计与实现

基于AES-256的单文件绿色版文件夹加密器设计与实现

1. 项目概述:为什么我们需要一个“便携式文件夹加密器”?在日常工作中,我们总会遇到一些需要临时加密保护的敏感文件。可能是即将交付给客户的商业计划书,也可能是包含个人财务信息的表格,又或者是一些不想被他人随意翻…

2026/8/1 7:56:46阅读更多 →
金融数仓标准化:信贷业务 ODS/DWD/DWS/ADS/DIM 全层级建模指南

金融数仓标准化:信贷业务 ODS/DWD/DWS/ADS/DIM 全层级建模指南

基于阿里 OneData 架构|信贷业务数仓分层完整落地实践(移除 DWM,博客定稿版)前言本文依托《大数据之路》OneData 核心理念,结合信贷全业务链路(授信 → 放款 → 还款 → 逾期 → 催收 → 不良处置&#xff…

2026/8/1 7:56:46阅读更多 →
HART协议详解:06 设备层,智能仪表内部数据流(核心特色)

HART协议详解:06 设备层,智能仪表内部数据流(核心特色)

第六季 设备层:智能仪表内部数据流(核心特色) ——打开HART智能设备黑盒:从传感器信号到4–20mA与数字诊断的双通道生命系统 各位工业现场的工程师朋友们,大家好! 在前五季中,我们已经从宏观到微观、从通信到应用,系统构建了HART协议的完整知识体系。 但是,真正要…

2026/8/1 7:56:46阅读更多 →
TCP三次握手与四次挥手:原理、实战与优化

TCP三次握手与四次挥手:原理、实战与优化

1. TCP连接管理的核心机制TCP协议作为互联网通信的基石,其连接建立与终止过程堪称网络编程的必修课。三次握手(Three-way Handshake)和四次挥手(Four-way Wavehand)这两个专业术语,本质上描述的是TCP协议如…

2026/8/1 13:46:55阅读更多 →
AI代码注释失效的5大致命陷阱:92%的团队正在踩坑,你中招了吗?

AI代码注释失效的5大致命陷阱:92%的团队正在踩坑,你中招了吗?

更多请点击: https://intelliparadigm.com 第一章:AI代码注释失效的5大致命陷阱:92%的团队正在踩坑,你中招了吗? 当AI生成的注释看似专业、语法工整,却在真实协作与维护中频频“失语”,问题往往…

2026/8/1 13:46:54阅读更多 →
Unity渲染调试利器RenderDoc:从原理到实战,精准定位模板测试问题

Unity渲染调试利器RenderDoc:从原理到实战,精准定位模板测试问题

1. 项目概述:为什么Unity开发者需要RenderDoc? 如果你是一名Unity开发者,尤其是涉足图形渲染、性能优化或者Shader编写,那么RenderDoc这个工具的名字你一定不陌生。但很多时候,我们只是“听说过”或者“简单用过”&…

2026/8/1 13:46:54阅读更多 →
WarcraftHelper:终极魔兽争霸3现代化插件,让经典游戏重获新生

WarcraftHelper:终极魔兽争霸3现代化插件,让经典游戏重获新生

WarcraftHelper:终极魔兽争霸3现代化插件,让经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争…

2026/8/1 13:46:54阅读更多 →
Kryo高性能序列化:原理、配置与生产环境实战指南

Kryo高性能序列化:原理、配置与生产环境实战指南

1. 项目概述:为什么我们需要关注Kryo? 在分布式系统、缓存中间件和高性能计算场景里,对象序列化是一个绕不开的基础设施。简单来说,序列化就是把内存中的对象状态转换成可以存储或传输的字节流,反序列化则是把这个字节…

2026/8/1 13:46:54阅读更多 →
唐山学音乐专业机构看教学规划

唐山学音乐专业机构看教学规划

在唐山找音乐培训机构,很多人第一反应是看教学规划。毕竟课程怎么安排、老师怎么配、实践机会多不多,这些直接关系到学习效果。我当初给孩子选机构时,也对比了好几家,最后注意到丹艺斯艺术培训中心——这家在唐山开了有些年头了&a…

2026/8/1 13:44:54阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/31 20:44:05阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/31 17:41:43阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/31 20:44:05阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →
无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理

无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 在数字媒体创作领域,视频编辑处理的质量损…

2026/8/1 0:00:10阅读更多 →
AI辅助本科论文写作:8大工具评测与高效使用指南

AI辅助本科论文写作:8大工具评测与高效使用指南

1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…

2026/8/1 0:00:10阅读更多 →
如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手

如何快速配置大麦自动抢票系统:从零开始搭建Python抢票助手 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票…

2026/8/1 0:00:10阅读更多 →