我的Firefox扩展如何下载部分下载的文件?

时间:2013-11-20 20:57:27

标签: javascript firefox firefox-addon download

Mozilla有一些code snippets for downloading files from a Firefox extension

我没有看到如何完成下载与wget -c类似的部分下载文件。

是否有某种方法可以继续从Firefox扩展程序下载部分下载的文件?

documentation for nsIWebBrowserPersist.saveURI()有一个参数aExtraHeaders。我只是在那里使用HTTP标头Range吗?

1 个答案:

答案 0 :(得分:1)

nsIWebBrowserPersist API不支持恢复。

您可以尝试使用built-in download manager。或者至少the code for it可能会有所帮助。

否则,你必须更低级别。在宏伟的计划中,你需要:

  • 直接使用nsIChannel / nsIHttpChannel
  • 通过nsIIOService.newChannel*()构建频道。
  • 尝试将QueryInterface频道改为nsIHttpChannel
  • 再次使用nsIHttpChannel.setRequestHeaderQI并使用nsIResumableChannel.resumeAt()。后者要求你事先知道entityID(http的ETag),但是在使用时会处理一堆东西,比如验证服务器是否确实响应了远程响应。
  • 实施nsIStreamLister/nsIRequestObserver,并随身携带channel.asyncOpen(listener, ...)
  • listener.onStartRequest中,您需要仔细检查请求是否合适(服务器实际回复206,依此类推)。 此外,还可以通过nsIFileStream或类似OS.File之类的东西来打开文件(由于快速原因,后者现在更受欢迎)。有关详细信息,请参阅MDN。不要忘记寻找文件中的适当位置。
  • listener.onDataAvailable中,将数据写入您的文件。还要检查服务器是否发送了太多数据。
  • listener.onStopRequest处理任何故障(连接切断,转移金额)。关闭你的文件。通知用户或其他任何内容。
  • 您可能需要实施许多其他内容,例如处理重定向,http-auth等

正如您所看到的,您需要完成的工作量和需要编写的代码量并非易事。

相关问题