V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waiaan
V2EX  ›  前端开发

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

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

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

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

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

    我这里其实算是请求未完成状态
    wunonglin
        3
    wunonglin  
       2021-11-26 16:13:22 +08:00
    请求成功后可以获取 body 的数据,在获取 body 的过程中(也就是下载),是可以得到以获取的二进制呀。
    大白话将你是想获取啥?按我理解,你是不是想下载了一半断网或者出错了,提取已经下载到的数据是不?
    waiaan
        4
    waiaan  
    OP
       2021-11-26 16:27:33 +08:00
    @wunonglin
    对的,是下载大文件的场景,连接已经建立成功,传输数据过程中断网,想取到已传输的数据
    wunonglin
        5
    wunonglin  
       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 属性的值会根据 responseType 属性包含实体主体( entity body ), 它可能会是一个 ArrayBuffer, Blob, Document,JSON, string,或者为 NULL(如果请求未完成或失败)

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

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

    一般情况下没人会在不稳定场景下下载大文件的(这里是我不知道你需求下的建议)
    wunonglin
        9
    wunonglin  
       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 能否在网络断开前下载完,只能取多少算多少,最后再来拼接。
    wunonglin
        11
    wunonglin  
       2021-11-26 17:08:00 +08:00
    @waiaan #10

    文件小的话重试就可以了。大文件就要分片下载了。
    10m 都不确定能不能下的话要么就分小片(比如 1m 一片? 512k 一片?这都不行你就要解决一下网络的问题了),要么就整个重试咯。毕竟文档也说请求没完成他会返回 null ,这个在浏览器内是没办法了
    wunonglin
        12
    wunonglin  
       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   ·   我们的愿景   ·   实用小工具   ·   958 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:42 · PVG 04:42 · LAX 13:42 · JFK 16:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.