未分類 23 2 月 2022 下载过程中服务器断开,如何取到已下载的数据? 下载过程中服务器断开,如何取到已下载的数据? 資深大佬 : waiaan 23 在 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 多谢