Minio分片合并时遇到了一个疑难问题

简介: 今天调用Minio的分片合并接口时,遇到了一个错误,困扰了我一整天。因为我始终在自己身上找原因,一度怀疑是自己的逻辑处理有问题,而且自己认为最可能的原因就是自己参数传错了。但是,万万没有想到,原来问题出在Minio服务自己身上。

前言

今天调用Minio的分片合并接口时,遇到了一个错误,困扰了我一整天。因为我始终在自己身上找原因,一度怀疑是自己的逻辑处理有问题,而且自己认为最可能的原因就是自己参数传错了。但是,万万没有想到,原来问题出在Minio服务自己身上。

正文

啥也不说了,我们来看一下合并时的报错信息:

Your proposed upload is smaller than the minimum allowed object size

报错截图:

网络异常,图片无法展示
|

说一下项目背景

各个终端(包括Web端、PC端、移动端APP、车端)将上传的视频文件,切片后发送给存储网关,再由存储网关转储到Minio对象存储中。现在遇到的这个问题的原因是各个终端上传的分片大小都是1MB或者2MB,都已经固定写死了,但是Minio对象存储要求的最小分片是5MB。因此,在合并某个文件的所有分片的时候,总是提示Your proposed upload is smaller than the minimum allowed object size

解决方案

当自己排查出是这个原因导致的合并错误后,赶紧整理了所有可能的解决方案,总的来说,总共有三个可行性方案。

方案一、各端同步修改分片大小

显而易见的方法,各个终端统一修改分片大小,统一改为5MB,但是这样有两个弊端:一、需要所有终端同步修改,涉及的范围比较大。二、对象存储服务不够灵活,当面临固定分片大小的时候,可能会出现无法兼容的问题。

方案二、存储网关重新构造分片

第二种方案也非常容易想到,就是将小分片的请求临时暂存起来,当缓存大小满足5MB时,再给Minio存储服务转发。我们需要考虑的就是大小分片的对齐问题。可能存在的问题:当多实例部署时,可能会导致某些分片无法进行合并拼接。

方案三、修改Minio分片大小限制

终极方案,直接修改Minio源码,调整分片大小限制,再重新编译。

分片大小在Minio源码中是写死的,代码如下:

globalMinPartSize = 5 * humanize.MiByte

修改方式也非常简单,本人目前是直接改成了1MB。

结尾

好了,合并Minio分片的问题终于解决了。其实,Minio的源码中有很多可以借鉴的经验,欢迎大家尝鲜。我是 liuzhen007, 中国邦德,一个敲代码的邦德,欢迎评论留言加“一键三连”。



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云社区云享专家、签约作者,欢迎关注我分享更多干货!😄

目录
相关文章
|
存储 前端开发 Java
spring boot 实现Minio分片上传
spring boot 实现Minio分片上传
1907 1
|
JavaScript 前端开发 Java
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
4569 2
|
存储 前端开发 Java
学成在线笔记+踩坑(5)——【媒资模块】上传视频,断点续传
上传视频,MinIO断点续传、检查文件/分块、上传分块、合并分块
学成在线笔记+踩坑(5)——【媒资模块】上传视频,断点续传
|
存储 Java API
MinIO Java SDK 7.1.4 升级到 8.5.17 需要注意什么
现在我需要你帮我分析对比这个两个sdk在对外的接口设计上是否有不兼容的变更
1436 5
|
前端开发 搜索推荐 数据可视化
阿里低代码引擎LowCodeEngine正式开源
低代码引擎是一款为低代码平台开发者提供的,具备强大扩展能力的低代码研发框架。由阿里巴巴前端委员会、钉钉宜搭联合出品。使用者只需要基于低代码引擎便可以快速定制符合自己业务需求的低代码平台。
阿里低代码引擎LowCodeEngine正式开源
|
存储 API 数据安全/隐私保护
Apipost vs Apifox:支持离线/强制登录,谁在捍卫开发者的数据安全?
在工具选型中,API管理工具是助手还是枷锁?文章通过分析Apifox强制登录、依赖云端,断网即失效;Apipost支持游客模式和本地存储,在极端环境下仍可用坐对比,揭露是否支持离线功能的本质是对数据主权的不同态度。从登录策略、离线能力到协作模式,可以看到,Apipost更尊重开发者自由与数据安全,适合对敏感性要求高的项目。最终建议选择工具时思考:若服务中断或断网,是否仍保有主动权?真正优秀的工具应如氧气般关键时不可或缺。
2513 9
Apipost vs Apifox:支持离线/强制登录,谁在捍卫开发者的数据安全?
|
存储 人工智能 前端开发
Botgroup.chat:超有趣的开源 AI 聊天室!多个 AI 在线互怼,一键搭建你的专属 AI 社群
Botgroup.chat 是一款基于 React 和 Cloudflare Pages 的开源 AI 聊天应用,支持多个 AI 角色同时参与对话,提供类似群聊的交互体验。
4212 28
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
36867 1
|
XML JSON API
如何从 Swagger 导出 API 文档
Swagger 使这项任务相对简单,允许开发者以各种格式(如 JSON 和 YAML)导出 API 文档。在这篇博文中,我们将详细探讨如何从 Swagger 导出 API 文档。
如何从 Swagger 导出 API 文档
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
2036 4
springboot + minio + kkfile实现文件预览

热门文章

最新文章