用JavaScript中的XMLHttpRequest暂停下载
通过XMLHttpRequest中的abort()方法可以中断请求并保留已接收的响应。要暂停下载,可以使用abort()方法中断请求,并将已接收的响应保存在某个地方。要恢复下载,需要向服务器请求仅发送缺少的部分。这涉及到HTTP范围和部分内容的处理。
具体实现方法可以参考以下链接:https://stackoverflow.com/questions/4551175
关于如何在调用abort()后获取响应的问题,目前没有具体的解决办法给出。
在Javascript中使用XMLHttpRequest暂停下载的原因是,调用abort()方法会丢弃xhr对象和之前下载的所有数据,无法保存已下载的数据。虽然可以使用xhr的Progress事件获取已下载的字节数,但无法获取实际的已下载数据,也无法缓存已下载的数据以便恢复下载。
然而,有一种绕过暂停xhr并在以后恢复下载的方法,就是使用字节范围(Bytes-Range)头部调用xhr。但是,为了使此方法生效,服务器需要接受字节范围头部。大多数现代服务器都默认接受字节范围头部。
在调用xhr时,需要从open()方法到onload事件中使用bytesFrom和bytesTo参数来完成xhr请求,并将接收到的数据块保存在数组中。然后,重复使用下一组字节发起请求,直到bytesTo等于文件的总字节数。每次在onload事件中接收到数据块时,都将其保存在数组中。
当接收到所有数据块时,可以使用Blob对象将它们合并为一个完整的文件。
为了使用这个Blob对象,可以创建一个URL。
因此,只有在使用Next bytes调用xhr请求时,xhr才会暂停,当再次使用Next bytes调用xhr请求时,它会恢复。