下载过程中服务器断开,如何取到已下载的数据? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waiaan
V2EX    前端开发

下载过程中服务器断开,如何取到已下载的数据?

  •  
  •   waiaan 2021-11-26 16:00:16 +08:00 1435 次点击
    这是一个创建于 1493 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 onprogress 中取 xhr.response ,结果值为 null 。 如题,谢谢。

    13 条回复    2021-11-26 17:11:13 +08:00
    shakaraka
        1
    shakaraka  
    PRO
       2021-11-26 16:02:23 +08:00
    waiaan
        2
    waiaan  
    OP
       2021-11-26 16:07:10 +08:00
    @wunonglin

    或者为 NULL(如果请求未完成或失败)

    我这里其实算是请求未完成状态
    shakaraka
        3
    shakaraka  
    PRO
       2021-11-26 16:13:22 +08:00
    请求成功后可以获取 body 的数据,在获取 body 的过程中(也就是下载),是可以得到以获取的二进制呀。
    大白话将你是想获取啥?按我理解,你是不是想下载了一半断网或者出错了,提取已经下载到的数据是不?
    waiaan
        4
    waiaan  
    OP
       2021-11-26 16:27:33 +08:00
    @wunonglin
    对的,是下载大文件的场景,连接已经建立成功,传输数据过程中断网,想取到已传输的数据
    shakaraka
        5
    shakaraka  
    PRO
       2021-11-26 16:28:25 +08:00
    @waiaan #4 那就是通过我#1 的方法去获取呗
    waiaan
        6
    waiaan  
    OP
       2021-11-26 16:35:02 +08:00
    @wunonglin

    不行,取出来是 null 。
    waiaan
        7
    waiaan  
    OP
       2021-11-26 16:36:00 +08:00
    @wunonglin
    文档里说

    response 属性的值会根据 responseype 属性包含实体主体( entity body ), 它可能会是一个 ArrayBuffer, Blob, Document,JSON, string,或者为 NULL(如果请求未完成或失败)

    我这个算请求未完成吗?
    shakaraka
        8
    shakaraka  
    PRO
       2021-11-26 16:39:27 +08:00
    @waiaan #6

    其实你可以分片下载就好了,比如 100m 文件分 10m 一个请求,当你下载到了 60m (也就是执行成功了 6/10 请求)到了第 7 个失败了,依然可以重试第 7 个。

    一般情况下没人会在不稳定场景下下载大文件的(这里是我不知道你需求下的建议)
    shakaraka
        9
    shakaraka  
    PRO
       2021-11-26 16:42:15 +08:00
    @waiaan #6 你可以看看视频网站的请求,比如 A 站、B 站、P 站,都是分片请求的,对于他们来说可以实现拖拽播放,动态清晰度切换,音视频轨道分离等操作
    waiaan
        10
    waiaan  
    OP
       2021-11-26 16:55:59 +08:00
    @wunonglin

    网络环境比较特殊,可以看成不确定 10m 能否在网络断开前下载完,只能取多少算多少,最后再来拼接。
    shakaraka
        11
    shakaraka  
    PRO
       2021-11-26 17:08:00 +08:00
    @waiaan #10

    文件小的话重试就可以了。大文件就要分片下载了。
    10m 都不确定能不能下的话要么就分小片(比如 1m 一片? 512k 一片?这都不行你就要解决一下网络的问题了),要么就整个重试咯。毕竟文档也说请求没完成他会返回 null ,这个在浏览器内是没办法了
    shakaraka
        12
    shakaraka  
    PRO
       2021-11-26 17:10:48 +08:00
    @waiaan #10

    分片太多会造成请求过多,但是你网络比较特殊的话你就自己考量考量咯。。

    当然你也可以动态分片大小,10m 一片出错了就降低成 1m ,以此类推呗
    waiaan
        13
    waiaan  
    OP
       2021-11-26 17:11:13 +08:00   1
    @wunonglin 多谢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2664 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 09:20 PVG 17:20 LAX 01:20 JFK 04:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86