首页 > 编程语言 > 详细

java后端实现接收文件分片+断点续传

时间:2021-05-15 20:28:14      阅读:37      评论:0      收藏:0      [点我收藏+]

不得不说SpringBoot太好用了。

要求:

  • 前端传来文件的名字,切片的长度,切片的序列号,文件切片;
  • 构造一个对象用来接收传来的数据

技术分享图片

技术分享图片

拿到切片后就可以写文件的合并了,先说以下,前端传过来的数据是严格顺序,上一个切片没有写入,下一个是不会传过来的,详情可以去看我另一篇文章原生JS实现大文件分片 - 知乎 (zhihu.com)

先说一下想法:

  1. 判断切片的序列号是否为0,如果为零就以name的值为文件名创建文件。
  2. 如果不是序列号不为0就说文件已经存在,提取传入文件的字节流写入写入文件内。
 public void 单片写入(文件 file) throws IOException {
        File file1 ;

        MultipartFile meFile =file.getFile();// MultipartFile 这个类可以方便的获取前端传过来的文件
        file1=new File("C:\\Users\\laptop\\IdeaProjects\\file21510\\src\\main\\resources\\temp\\001\\"+file.getName());
        //filel获取文件,没有就创建
        if (!file1.exists()&&file.get切片序列()==0)//文件是否已经创建且文件是第一个保证文件的顺须
        {
            meFile.transferTo(file1);//如果没有就创建
             return;
        }
        else {//如果已经创建就合并
        RandomAccessFile raf = new RandomAccessFile(file1,"rw");
        // RandomAccessFile类所提供的发方法可以动态的操作文件,
       //这里创建一个可以操作不完整文件的对象

            
        raf.seek(file.get切片序列()*file.get切片长度());//seek(int n)从n处处理
            byte[] bytes = meFile.getBytes();//提区文件的字节流
            raf.write(bytes);//上面的seek方法已经把指针放在这里从这直接写入
              

          raf.close();//写入后关闭

        }

    }
}

上面就可以实现分片文件的接收合并了,重要的是MultipartFile,RandomAccessFile,这两个类。

断点续传

实现断点续传的构思

  1. 文件分片按顺序上传,上传第一个后文件名md5加密保存到rdis的key,value保存为上传的切片序列的大小,
  2. 然后下面每次保存成功就更新对应的value,保持最新的。
  3. 每一次接收时查询redis是否已经存在相同的key,如果相同就跳到保存的index的下一个保存

有了上面的代码只需要在构造一个连接redis的接口和实现类。

这是我想的,如果有什么错误,请大家指出

java后端实现接收文件分片+断点续传

原文:https://www.cnblogs.com/pengfuhao/p/14772087.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!