我的Firefox扩展插件如何下载部分下载的文件
How can my Firefox extension download a partially downloaded file?
Mozilla有一些代码片段,用于从Firefox扩展下载文件。
我没有看到如何完成类似于wget -c
的部分下载文件的下载。
有没有办法继续从Firefox扩展程序下载部分下载的文件?
nsIWebBrowserPersist.saveURI()
的文档有一个参数aExtraHeaders
。我只是在那里使用HTTP头Range
吗?
nsIWebBrowserPersist
API不支持恢复。
您可以尝试使用内置的下载管理器。或者至少它的代码可能会有所帮助。
否则,你就必须更低级。在总体方案中,您需要:
- 直接使用
nsIChannel
/nsIHttpChannel
- 通过
nsIIOService.newChannel*()
构建一个通道 - 尝试将信道
QueryInterface
连接到nsIHttpChannel
- 再次使用
nsIHttpChannel.setRequestHeader
或QI
并使用nsIResumableChannel.resumeAt()
。后者要求您事先知道entityID(http的ETag),但在使用时会处理一些事情,比如验证服务器是否确实使用了范围响应 - 实现一个
nsIStreamLister
/nsIRequestObserver
,并用它调用channel.asyncOpen(listener, ...)
- 在
listener.onStartRequest
中,您需要仔细检查请求是否可以继续(服务器实际回复了206
,依此类推)。此外,打开文件的时间,可以通过nsIFileStream或类似OS.file的东西(出于快速的原因,现在更喜欢后者)。有关详细信息,请参阅MDN。不要忘记在文件中查找适当的位置 - 在
listener.onDataAvailable
中,将数据写入文件。还要检查服务器是否没有发送过多数据 - 在
listener.onStopRequest
中,处理任何故障(断开连接、转移金额)。关闭文件。通知用户或其他什么 - 您可能需要实现许多其他东西,例如处理重定向、http验证等
正如您所看到的,您需要做的工作量和需要编写的代码量是非常重要的。
相关文章:
- 如何在生成下载文件时显示加载动画
- 直接下载文件,而不是从window.open(url)
- Javascript运行php文件,然后下载文件
- 在单击href链接的同时下载文件
- 通过javascript下载文件时设置文件名
- HTML锚标记无法在android平台中下载文件
- 链接/按钮从子文件夹下载文件--浏览器只是浏览
- iPhone强制下载文件
- 正在下载文件,同时加载另一个页面
- 如何在node.js中只下载文件的前10 KB
- 如何使用XMLHttpRequest下载文件
- 使用angular js在前端下载文件
- 使用blob从ajax结果下载文件
- 通过Android Chrome浏览器下载文件
- 使用AJAX下载文件.来自SD卡
- 如何使用phonegap从android中的URL下载文件
- 使用ajax下载文件
- 无法使用Angular JS和spring MVC打开下载文件
- 无法使用API-node.js从Google Drive下载文件
- 点击jQuery按钮下载文件