« XULPlanet の XPCOM リファレンスが Firefox 3 / Mozilla 1.9 ベースに更新 | nsIWebBrowserPersist の基本的な使い方 (2) ~ persistFlags » |
nsIWebBrowserPersist の基本的な使い方 (1) ~ 基本形
指定したURLからダウンロードしてファイルへ保存する際には nsIWebBrowserPersist が便利。
HTTPだけでなく、FTP、file:やchrome:プロトコルなどのURLからのファイル保存も可能ですが、ここではHTTPを前提とします。
nsIWebBrowserPersist の主要メソッド
メソッド | 概要 |
---|---|
saveURI() | 指定したURIからダウンロードしてファイルへ保存する。 |
saveChannel() | 指定したチャネル(nsIHttpChannel など)をファイルへ保存する。 |
saveDocument() | 指定したDOMドキュメントをファイルへ保存する。 |
基本形
指定したURLのデータをダウンロードし、指定したパスのファイルへと保存するだけの簡単なコードを作る。
まずは URL 文字列から nsIURL オブジェクトを、ファイルパスから nsILocalFile オブジェクトを生成する。
const URL_SPEC = "http://www.mozilla.com/img/firefox-title.png"; const FILE_PATH = "C:firefox-title.png"; // make nsIURL var url = Cc["@mozilla.org/network/standard-url;1"].createInstance(Ci.nsIURL); url.spec = URL_SPEC; // make nsILocalFile var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile); file.initWithPath(FILE_PATH);
saveURI の場合
nsIWebBrowserPersist のインスタンスを生成し、先ほどの2つのオブジェクトを引数に saveURI を実行するだけ。
// save URL to file var wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] .createInstance(Ci.nsIWebBrowserPersist); wbp.saveURI(url, null, null, null, null, file);
saveChannel の場合
色々なものを引数で指定できる便利屋的な saveURI メソッドに対して、 saveChannel メソッドは nsIChannel を引数とすることでより詳細な実装が可能。
nsIIOService を使って nsIURL オブジェクトから nsIHttpChannel オブジェクトを生成し、 nsIHttpChannel と nsILocalFile を引数に saveChannel メソッドを実行する。
// make nsIHttpChannel var ioSvc = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); var channel = ioSvc.newChannelFromURI(url).QueryInterface(Ci.nsIHttpChannel); // save channel to file var wbp = Cc["@mozilla.org/embedding/browser/nsWebBrowserPersist;1"] .createInstance(Ci.nsIWebBrowserPersist); wbp.saveChannel(channel, file);
なお、 nsIChannel を saveChannel に渡す前に open / asyncOpen してはならない。
参考
nsIWebBrowserPersist.idl
nsIIOService.idl
nsIChannel.idl
nsIHttpChannel.idl
関連記事
nsIWebBrowserPersist の基本的な使い方 (1) ~ 基本形
nsIWebBrowserPersist の基本的な使い方 (2) ~ persistFlags
nsIWebBrowserPersist の基本的な使い方 (3) ~ 各種ヘッダの追加
nsIWebBrowserPersist の基本的な使い方 (4) ~ POST メソッド
nsIWebBrowserPersist の基本的な使い方 (5) ~ ダウンロード進捗状況
つづく…?