在我的FF擴展中,我創建了一個從DOM中檢索數據的對象(一個字符串)。將帶有Mozilla Firefox擴展的字符串對象內容下載爲純文本文件
現在我需要下載一個帶有字符串內容的純文本文件。結果應該是一個CSV文件。
我讀了addDownload
方法,但我錯過了很多件...任何提示?
主要是我不知道如何:
在下載對象 「轉換」 我的字符串
正確調用
(文件?)addDownload
方法(nsIURI等)
非常感謝您的幫助。
在我的FF擴展中,我創建了一個從DOM中檢索數據的對象(一個字符串)。將帶有Mozilla Firefox擴展的字符串對象內容下載爲純文本文件
現在我需要下載一個帶有字符串內容的純文本文件。結果應該是一個CSV文件。
我讀了addDownload
方法,但我錯過了很多件...任何提示?
主要是我不知道如何:
在下載對象 「轉換」 我的字符串
正確調用addDownload
方法(nsIURI等)
非常感謝您的幫助。
您有很多方法。老派的方式是直接操縱nsIFile
和nsIFileOutputStream
,儘管你不能以這種方式寫空字節。您也可以從字符串創建nsIStringInputStream
並將其寫入輸出流,或者使用nsIAsyncStreamCopier
異步複製它。 FileUtils.jsm
和NetUtil.jsm
的存在是爲了讓你更容易。但是,如果您打算使用足夠新的Firefox版本,則可以忽略所有這些,並使用OS.File
API代替。
這是我的擴展的一部分,它顯示另存爲對話框,以便用戶可以選擇正確的位置(你可以跳過這一部分或試圖找出其中的下載應自動放置)
const nsIFilePicker = Components.interfaces.nsIFilePicker;
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, "Save as", nsIFilePicker.modeSave);
fp.appendFilters(nsIFilePicker.filterHTML);
fp.appendFilters(nsIFilePicker.filterAll);
var rv = fp.show();
if (rv == nsIFilePicker.returnOK || rv == nsIFilePicker.returnReplace) {
var file = fp.file;
// work with returned nsILocalFile...
// Check that it has some extension
var name = file.leafName;
if (-1==name.indexOf('.'))
file.leafName = name + '.html' ;
// file is nsIFile, data is a string
var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance(Components.interfaces.nsIFileOutputStream);
// use 0x02 | 0x10 to open file for appending.
foStream.init(file, 0x02 | 0x08 | 0x20, 0666, 0);
// write, create, truncate
foStream.write(data, data.length);
foStream.close();
所以你真正想做的是寫一個字符串到一個文件? – Neil 2013-02-21 10:29:05
是的,我從字符串中收集DOM中的一些內容,並且需要下載包含該內容的文本文件。如果字符串可能成爲問題,我可以將內容存儲在其他類型的對象中。 – enricostn 2013-02-21 14:39:29