使用Firefox插件下载文件

时间:2011-07-12 12:14:23

标签: firefox firefox-addon

我是Firefox插件开发的新手,到目前为止一直很顺利,但我一直坚持如何从Web上下载一个文件,给定一个URI,并将其保存到磁盘。 Mozilla的MDN文档包含有关如何上传文件的信息,但下载文件部分是空的,尚未编写。遗憾的是,我没有找到任何描述如何执行此操作的文档。

有谁知道有关如何执行此操作的相关文档?


旧的Facebook Photo Album Downloader插件在其覆盖JavaScript中使用此函数调用:

saveURL(images[i].replace(/\/s/g, "/n"), null, null, false, true, null);

显然,第一个参数是要请求的URI。 saveURL函数未在任何地方定义,因此我假设它是扩展API函数。我在我的新插件中试过它,它确实有用。但是,我想知道其他论点的意思。

4 个答案:

答案 0 :(得分:5)

执行此操作的标准方法是使用nsIWebBrowserPersist:

var persist =
  Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"].
  createInstance(Ci.nsIWebBrowserPersist);
persist.saveURI(serverURI, null, null, null, "", targetFile);

有关详细信息,请参阅https://developer.mozilla.org/en/Code_snippets/Downloading_Files

答案 1 :(得分:3)

实际上有一些关于此的MDN文档:https://developer.mozilla.org/en/Code_snippets/Downloading_Files

答案 2 :(得分:1)

这是一个简单的复制/粘贴选项,适合任何寻求快速解决方案而无需进一步搞乱的人。把它放在你的main.js中并更改文件名,目录和URL。

function DownloadFile(sLocalFileName, sRemoteFileName)
{
    var saveToDirectory = 'C:\\Users\\louis\\downloads\\';

    var chrome = require("chrome");

    var oIOService = chrome.Cc["@mozilla.org/network/io-service;1"].getService(chrome.Ci.nsIIOService)

    var oLocalFile = chrome.Cc["@mozilla.org/file/local;1"].createInstance(chrome.Ci.nsILocalFile);
    oLocalFile.initWithPath(saveToDirectory + sLocalFileName);

    var oDownloadObserver = {onDownloadComplete: function(nsIDownloader, nsresult, oFile) {console.log('download complete...')}};

    var oDownloader = chrome.Cc["@mozilla.org/network/downloader;1"].createInstance();
    oDownloader.QueryInterface(chrome.Ci.nsIDownloader);
    oDownloader.init(oDownloadObserver, oLocalFile);

    var oHttpChannel = oIOService.newChannel(sRemoteFileName, "", null);
    oHttpChannel.QueryInterface(chrome.Ci.nsIHttpChannel);
    oHttpChannel.asyncOpen(oDownloader, oLocalFile);    

}
DownloadFile("saveAsThis.mp3","http://domain.com/file.mp3");

答案 3 :(得分:0)

截至2015年,自问题得到解答以来,用于管理(启动,停止等)下载的API已发生变化。新的API(链接到MDN上的文档):