跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 下载过程中服务器断开,如何取到已下载的数据?
未分類
15 1 月 2022

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

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

資深大佬 : waiaan 20

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

大佬有話說 (13)

  • 資深大佬 : wunonglin

    应该是可以拿得到二进制数据的,可以试下
    https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

  • 主 資深大佬 : waiaan

    @wunonglin
    或者为 NULL(如果请求未完成或失败)
    我这里其实算是请求未完成状态

  • 資深大佬 : wunonglin

    请求成功后可以获取 body 的数据,在获取 body 的过程中(也就是下载),是可以得到以获取的二进制呀。
    大白话将你是想获取啥?按我理解,你是不是想下载了一半断网或者出错了,提取已经下载到的数据是不?

  • 主 資深大佬 : waiaan

    @wunonglin
    对的,是下载大文件的场景,连接已经建立成功,传输数据过程中断网,想取到已传输的数据

  • 資深大佬 : wunonglin

    @waiaan #4 那就是通过我#1 的方法去获取呗

  • 主 資深大佬 : waiaan

    @wunonglin
    不行,取出来是 null 。

  • 主 資深大佬 : waiaan

    @wunonglin
    文档里说
    response 属性的值会根据 responseType 属性包含实体主体( entity body ), 它可能会是一个 ArrayBuffer, Blob, Document,JSON, string,或者为 NULL(如果请求未完成或失败)
    我这个算请求未完成吗?

  • 資深大佬 : wunonglin

    @waiaan #6
    其实你可以分片下载就好了,比如 100m 文件分 10m 一个请求,当你下载到了 60m (也就是执行成功了 6/10 请求)到了第 7 个失败了,依然可以重试第 7 个。
    一般情况下没人会在不稳定场景下下载大文件的(这里是我不知道你需求下的建议)

  • 資深大佬 : wunonglin

    @waiaan #6 你可以看看视频网站的请求,比如 A 站、B 站、P 站,都是分片请求的,对于他们来说可以实现拖拽播放,动态清晰度切换,音视频轨道分离等操作

  • 主 資深大佬 : waiaan

    @wunonglin
    网络环境比较特殊,可以看成不确定 10m 能否在网络断开前下载完,只能取多少算多少,最后再来拼接。

  • 資深大佬 : wunonglin

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

  • 資深大佬 : wunonglin

    @waiaan #10
    分片太多会造成请求过多,但是你网络比较特殊的话你就自己考量考量咯。。
    当然你也可以动态分片大小,10m 一片出错了就降低成 1m ,以此类推呗

  • 主 資深大佬 : waiaan

    @wunonglin 多谢

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具