我是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函数。我在我的新插件中试过它,它确实有用。但是,我想知道其他论点的意思。
答案 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上的文档):