2011-07-12 64 views
7

我是Firefox插件開發的新手,目前它運行良好,但我堅持如何基本上從Web上下載文件,給定URI並將其保存到磁盤。 Mozilla的MDN文檔包含有關如何上傳文件的信息,但下載文件部分爲空且尚未編寫。可悲的是,我還沒有找到任何文件描述如何做到這一點。使用Firefox插件下載文件

有誰知道如何做到這一點的相關文件?


舊的Facebook相冊下載插件使用在其覆蓋的JavaScript調用這個函數:

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

顯然,第一個參數是URI請求。 saveURL函數沒有在任何地方定義,所以我認爲它是一個擴展API函數。我已經在我的新插件中嘗試過了,它確實有效。不過,我想知道其他論點的含義。

+0

你見過這個嗎? http://stackoverflow.com/questions/3749231/download-file-using-javascript-jquery 我在我的Firefox插件中使用JQuery。 – ysrb

+0

可悲的是,這對我來說並不適用,因爲我無法訪問有問題的Web服務器,因此無法修改與文件一起發送的MIME類型。必須有一個本地API方法來做到這一點擴展 - 我只是找不到它。 –

+0

@Delan:'saveURL'絕對不是一個API函數 - 它可以在導入的JavaScript模塊或類似的東西中定義。 –

回答

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已收到第7個參數privacyContext。用法[這裏](https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIWebBrowserPersist#saveURI%28%29) – Bora

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