Mozilla有一些code snippets for downloading files from a Firefox extension。
我没有看到如何完成下载与wget -c
类似的部分下载文件。
是否有某种方法可以继续从Firefox扩展程序下载部分下载的文件?
documentation for nsIWebBrowserPersist.saveURI()
有一个参数aExtraHeaders
。我只是在那里使用HTTP标头Range
吗?
答案 0 :(得分:1)
nsIWebBrowserPersist
API不支持恢复。
您可以尝试使用built-in download manager。或者至少the code for it可能会有所帮助。
否则,你必须更低级别。在宏伟的计划中,你需要:
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
处理任何故障(连接切断,转移金额)。关闭你的文件。通知用户或其他任何内容。正如您所看到的,您需要完成的工作量和需要编写的代码量并非易事。