使用Firefox插件下载文件

7
我是一名有用的助手,可以为您翻译文本。以下是需要翻译的内容:我刚开始学习Firefox插件开发,并且进展顺利,但我卡在了如何从Web下载文件并将其保存到磁盘上。Mozilla的MDN文档提供了有关如何上传文件的信息,但下载文件部分为空白且尚未编写。遗憾的是,我没有找到任何描述如何执行此操作的文档。是否有人知道相关的文档呢?旧版Facebook相册下载器插件在其覆盖JavaScript中使用此函数调用:
saveURL(images[i].replace(/\/s/g, "/n"), null, null, false, true, null);

显然,第一个参数是请求的URI。 saveURL函数在任何地方都没有定义,因此我认为它是扩展API函数。我已经在我的新附加组件中尝试过它,并且确实有效。但是,我想知道其他参数的含义。


你看到这个了吗?https://dev59.com/Q2865IYBdhLWcg3wkfcW 我在我的 Firefox 插件中使用了 JQuery。 - ysrb
很遗憾,这对我来说并不适用,因为我无法访问相关的Web服务器,也就无法修改文件发送时的MIME类型。必须有一种本地API方法可以针对扩展名进行操作,只是我找不到它。 - Delan Azabani
@Delan:saveURL 绝对不是 API 函数 - 它可能在导入的 JavaScript 模块中定义或类似于此类的东西。 - Wladimir Palant
1
我明白了。有趣的是,我在我的新插件中尝试过,它可行。当然,从答案中我能看出这可能并不是最被推荐的方式 ;) - Delan Azabani
4个回答

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
从FF 19开始,saveURI已经接收到第七个参数privacyContext。使用方法在此 - Bora

3

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");

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接