用JavaScript中的XMLHttpRequest暂停下载

9 浏览
0 Comments

用JavaScript中的XMLHttpRequest暂停下载

我正在尝试使用Javascript的XMLHttpRequest对象通过网页链接下载文件。我无法确定是否可能暂停下载并稍后继续下载?

0
0 Comments

通过XMLHttpRequest中的abort()方法可以中断请求并保留已接收的响应。要暂停下载,可以使用abort()方法中断请求,并将已接收的响应保存在某个地方。要恢复下载,需要向服务器请求仅发送缺少的部分。这涉及到HTTP范围和部分内容的处理。

具体实现方法可以参考以下链接:https://stackoverflow.com/questions/4551175

关于如何在调用abort()后获取响应的问题,目前没有具体的解决办法给出。

0
0 Comments

在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请求时,它会恢复。

0
0 Comments

技术上是有可能的,没有暂停/恢复,你可以使用responseType "blob"进行XmlHttpRequest,然后通过链接将blob转发给用户(点击即可立即下载,就像mega一样)。但是,如果你想要暂停/恢复,我看到你必须使用XmlHttpRequest的abort方法,创建一个临时的blob,当用户恢复下载时,你需要从前一个请求停止的字节开始启动一个新的xhr。在完成下载(或发生新的中止)之后,你需要将所有新的字节添加到之前的blob中。我需要尝试一下,但唯一的限制(我认为)可能是浏览器崩溃或blob配额不足。对不起,我的英语不好,我是一个法国青蛙;)

0