java吧 关注:1,295,555贴子:12,832,018
  • 22回复贴,共1

菜鸡询问分片断点续传问题

只看楼主收藏回复

原本的断点续传方案是前端先计算整个MD5的值然后分片上传,MD5加上分片序号就是一个chunk,这个时候很容易判断同一文件的某个块是否上传了。
但是这时候有个5G的大文件,计算整个文件的MD5特别慢,改成分别计算每个块的MD5值上传,这个时候通过什么判断是同一文件有大神解答一下吗
比如我今天上传了这个5G的文件分成了1000个5M的块,只上传500个块,上传到一半网页关了,下一次上传就需要从第501块开始上传,这个时候怎么判断同一文件,因为我没有原文件的MD5只有原文件的分块MD5,这时候怎么判断这些块是属于这个文件的


IP属地:福建1楼2023-07-20 22:45回复
    在没有收到完整的数据前,你是没有办法判断的因为这是客户端给你的。客户端肯定知道我要传的是501。所以说保证客户端是有效的就可以了。


    IP属地:湖南来自Android客户端2楼2023-07-21 08:48
    收起回复
      2026-01-23 16:48:35
      广告
      不感兴趣
      开通SVIP免广告
      至于你说的这种断点续传确定文件,你不会搞个标识?
      你用户名是唯一的是吧?
      比如你就放到
      用户标识/文件名/拓展名。这个用来标识唯一途径。如果他继续传就继续加。下之前先获取一下这个最新的是多少。


      IP属地:湖南来自Android客户端3楼2023-07-21 08:59
      收起回复
        我觉得你的逻辑不对
        流程应该至少是用户先申请个上传的session 至少分配并返回一个id,你拿这个id去映射存储,用户拿这个id映射续传。至于分片,照理顺序/大小/完整性都可以打乱,只要API定义好怎么表达这些meta数据


        IP属地:美国来自iPhone客户端4楼2023-07-21 11:43
        回复
          分片不校验md5. 服务端得有表记录分片进度


          IP属地:辽宁5楼2023-07-21 12:07
          回复
            多个块的MD5本身就可以合成为整体的MD5,如果你要检验,整体的MD5是最好要有的,或者等价所有块的MD5。不过本身在上传之前计算整体的MD5就是合理的延迟,因为如果检验和后台已有的某个文件相同,你甚至可以直接实现所谓的秒传。你思路怪怪的,你是有启动延迟目标,但不该抛弃重要信息。可以参考zgc降延迟思路,先算好一部分然后同时进行计算和传。


            IP属地:广东来自Android客户端6楼2023-07-21 12:15
            收起回复
              分片进度在数据库,断点续传查询有没有这个分片的记录,返回结果


              IP属地:新疆来自Android客户端7楼2023-07-21 15:23
              回复
                目前改成第一次上传分片的时候判断分片表是否有该md5分片,如果没有则在文件表插入一条数据,有个整个分片上传的标识,还有初始分片的md5和整个文件的大小,后续判断同一文件就采用第一分片的md5和文件大小来判断是否为同一文件了,不然前端计算整个大文件的md5太久了


                IP属地:福建来自iPhone客户端8楼2023-07-21 16:04
                回复
                  2026-01-23 16:42:35
                  广告
                  不感兴趣
                  开通SVIP免广告
                  要么在前端存储进度,要么后端到缓存里,分片不需要单独计算md5,打开个文件根据发送的字节范围直接覆写,文件名就用这个文件的md5代替,文件信息维护在表中。


                  IP属地:上海来自Android客户端9楼2023-07-21 16:27
                  回复
                    你可以参考下minio的流程,上传文件先创建一个整体文件信息,调用api给你返回一个uploadid,然后你在切片上传,根据uploadid来返回已上传分片的信息(md5作为唯一分片标识)


                    IP属地:广东来自Android客户端10楼2023-07-21 17:05
                    回复
                      file有slice方法可以获取分片 所以可以对一个文件从头到尾进行抽样,再做md5 比直接用第一分片的可能要更好些


                      IP属地:河北来自Android客户端12楼2023-07-21 20:20
                      回复
                        手动分片的做法很奇怪 包括断点续传什么的,本来是传输层网络层该做的事


                        IP属地:四川来自Android客户端13楼2023-07-21 22:26
                        回复
                          计算整个文件的md5也没什么,这么大反正上传也慢。我直接让前端计算md5显示进度,伪装成在上传。用户又不知道在干嘛


                          IP属地:广东来自Android客户端14楼2023-07-22 00:33
                          收起回复
                            我觉得网盘的作法是要计算md5的,上传文件的时候直接cpu占用拉满。下载完以后按块校验


                            IP属地:天津来自Android客户端15楼2023-07-24 08:49
                            回复
                              2026-01-23 16:36:35
                              广告
                              不感兴趣
                              开通SVIP免广告
                              就计算整个文件的md5,小文件很快,大文件反正上传也要很久,不差计算md5这点时间.


                              IP属地:湖北16楼2023-07-25 21:02
                              回复