为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第20天 文件分片,断点续传测试

标签:
Java

一、课程介绍

【课程名称】SpringBoot 2.x 实战仿B站高性能后端项目。
【章节】第四章 4.8 、 4.9 文件分片
【讲师】HELLOSTAR

二、课程内容

文件分片

文件分片实现逻辑
使用java.io接口对字节流进行读写操作,将上传的文件以字节流的形式按设定的分片大小划分。
偏移量是在文件流中的下标位置。这个下标位置也是每个分片读取部分流文件的起始位置。
使用RandomAccessFile类每次从当前分片起始位置读取文件,并向文件夹中写入当前分片大小的文件。(因为最后一个分片小于分片长度)
每个分片按序号顺序命名,生成各个分片文件并写入到临时文件夹中。

文件分片实现代码
1.将MultiPartFile文件类型转换成file文件类型

public File multipartFileToFile(MultipartFile multipartFile) throws Exception{
        String originalFileName = multipartFile.getOriginalFilename();
        String[] fileName = originalFileName.split("\\.");
        File file = File.createTempFile(fileName[0], "." + fileName[1]);
        multipartFile.transferTo(file);
        return file;
    }

2.文件分片,并记录分片总数量

//分片大小
private static final int SLICE_SIZE = 1024 * 1024 * 2;
//文件分片功能
public void convertFileToSlices(MultipartFile multipartFile) throws Exception{
        String fileType = this.getFileType(multipartFile);
        //生成临时文件,将MultipartFile转为File
        File file = this.multipartFileToFile(multipartFile);
        long fileLength = file.length();
        int count = 1;
        for(int i = 0; i < fileLength; i += SLICE_SIZE){
            RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r");
            //将文件的读写指针移动至当前偏移位置
            randomAccessFile.seek(i);
            byte[] bytes = new byte[SLICE_SIZE];
            //读取分片的长度(最后一个分片长度未知)
            int len = randomAccessFile.read(bytes);
            String path = "/Users/hat/tmpfile/" + count + "." + fileType;
            File slice = new File(path);
            FileOutputStream fos = new FileOutputStream(slice);
            //写入文件
            fos.write(bytes, 0, len);
            fos.close();
            randomAccessFile.close();
            //记录分片总个数
            count++;
        }
        //删除临时文件
        file.delete();
    }

三、课程收获

使用Java的IO接口即可实现文件的分片。实现原理是按照文件的偏移量逐片读取的文件,即是每一个分片文件。之后可以做后续业务处理。比如实现文件断点续传,秒传。(每个分片文件分配MD5值,在服务端校验服务器中是否存在)

四、学习过程

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消