Minio上传分块文件不按原大小上传

今天测试一个Minio上传分块文件源文件如下

        

 可以看见每个分块都是5兆,分块代码如下:

 //测试文件分块方法
    @Test
    public void testChunk() throws IOException {
        File sourceFile = new File("D:\\develop1\\upload\\1.mp4");//源文件路径
        String chunkPath = "D:\\develop1\\upload\\chunk\\"; //分块文件路径
        File chunkFolder = new File(chunkPath);
        if (!chunkFolder.exists()) {
            chunkFolder.mkdirs();
        }
        //分块大小
         final int MIN_MULTIPART_SIZE = 1024 * 1024 * 5;
        //分块数量
        long chunkNum = (long) Math.ceil(sourceFile.length() * 1.0 / MIN_MULTIPART_SIZE);
        System.out.println("分块总数:"+chunkNum);
        //缓冲区大小
        byte[] b = new byte[1024];
        //使用RandomAccessFile访问文件
        RandomAccessFile raf_read = new RandomAccessFile(sourceFile, "r");
        //分块
        for (int i = 0; i < chunkNum; i++) {
            //创建分块文件
            File file = new File(chunkPath+i);
                //向分块文件中写数据
                RandomAccessFile raf_write = new RandomAccessFile(file, "rw");
                int len = -1;
                while ((len = raf_read.read(b)) != -1) {
                    raf_write.write(b, 0, len);
                    if (file.length() >= MIN_MULTIPART_SIZE) {
                        break;
                    }
                }
                raf_write.close();
                System.out.println("完成分块"+i);


        }
        raf_read.close();
    }

后续进行测试上传Minio代码如下:

 @Test
    public void uploadChunk(){
        String chunkFolderPath = "D:\\develop1\\upload\\chunk\\";
        File chunkFolder = new File(chunkFolderPath);
        //分块文件
        File[] files = chunkFolder.listFiles();
        //将分块文件上传至minio
        for (int i = 0; i < files.length; i++) {
            try {
                UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder().bucket("testbucket").object("chunk/" + i).filename(files[i].getAbsolutePath()).build();
                minioClient.uploadObject(uploadObjectArgs);
                System.out.println("上传分块成功"+i);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

上传结果却是这样的:

 可以看见第二个文件变成了最小的,而最后一个则是5兆查了很多博客以及百度了很久都没有找到类似的问题以及解决方案,这样在合并的时候Minio就会报错因为Minio只允许最后一个文件大小小于5兆,如果要修改则要修改源码并且我不确定修改源码后合并出来的文件是否是完整可用的

所以我在进行分块的时候将每个文件大小设置为6兆

//分块大小
         final int MIN_MULTIPART_SIZE = 1024 * 1024 * 6;

分块后文件如下:

 再次进行上传Minio中文件如下

 此时可以看到上传的文件最后一个为最小其余都是6兆,并且在进行后续合并测试也通过了,合并出来的文件也完好无损,关于这个问题本来想深挖一下原因的但是因为凌晨2点半在写这个不想浪费时间也想多留住几根头发所以试下了改变分块文件的大小为6就快速解决了,有同样问题的程序猿可以参考一下如果有大佬发现了原因麻烦评论告知一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值