Minio分片上传解除分片大小限制 - chunk size must be greater than 5242880

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、chunk size must be greater than 5242880?
  • 二、解决方法
    • 1.前后端统一分片大小
    • 2.修改minio源码
  • 总结


前言

大概内容:

在使用minio进行上传大文件时,往往需要对大文件进行分片上传。在这个过程中就会踩到很多坑,minio进行文件上传时,可以直连文件服务器,而后端作为参数保存和合并发起的调用者存在。在合并的过程中,因为minio自身代码限制,会出现一些不必要的问题。


一、chunk size must be greater than 5242880?

在后端参与的上传中,往往调用后端接口进行上传,是不需要对文件大小进行最小限制的,而minio不一样,在源码中,minio规定:minio除最后一块分片可以小于5m,其余分片必须大于等于5m,也就是说,出现这个问题,要么是minio在对你上传分片排序出现问题,造成中间一片小于5m;要么是前端定义的分片大小本身就小于5m

二、解决方法

1.前后端统一分片大小

这是最简单的解决方法,前后端统一将分片大小设置为5mb。最后一片可以小于5m,这样的作法优点是简单。缺点是在外露上传接口后,固定分片大小会造成网络差的环境容易出现请求超时的情况。

2.修改minio源码

通过composeObject方法找到合并接口的源代码,并且download下载源码

    client.composeObject(
            ComposeObjectArgs.builder()
                    .bucket(bucketName)
                    .object(objectName)
                    .sources(sourceObjectList)
                    .build());

在源码中有一个calculatePartCount方法,字面意思为计算分片数量:

int partCount = calculatePartCount(sources);

在这个方法下,有几个定义的常量,其中就有限制最小为5mb的常量,我们通过修改5m为1mb或者你想要的大小就可以完成取消文件大小限制

      if (size < ObjectWriteArgs.MIN_MULTIPART_SIZE && sources.size() != 1 && i != sources.size()) {
        throw new IllegalArgumentException(
            "source "
                + src.bucket()
                + "/"
                + src.object()
                + ": size "
                + size
                + " must be greater than "
                + ObjectWriteArgs.MIN_MULTIPART_SIZE);
      }

将510241024修改为指定大小

  // allowed minimum part size is 5MiB in multipart upload.
  public static final int MIN_MULTIPART_SIZE = 5 * 1024 * 1024;

后面出如何修改源码并使用


总结

在带宽足够的情况下,可以直接使用第一种方法;而在特殊的条件下,选第二种;

你可能感兴趣的:(web,java,运维)